原生JavaScript操作——節(jié)點操作

進入正題,開始學(xué)習(xí)JavaScript原生節(jié)點操作。

1.查找節(jié)點

獲取一般節(jié)點(當(dāng)然也可以獲取特殊關(guān)系節(jié)點)

按id查找

document.getElementByID('patty');

按class名查找

document.getElementsByClassName('patty');

按標(biāo)簽名查找

document.getElementsByTagName('patty');

統(tǒng)一查找

document.querySelector('#id');
document.querySelectorAll('#id div');

獲取特殊關(guān)系節(jié)點

獲取父節(jié)點

document.getElementByID('patty').parentNode;

獲取元素子節(jié)點
/*childNodes會返回指定元素的所有種類節(jié)點
  children只返回指定元素的元素節(jié)點,ie下包括注釋節(jié)點
*/
var getChildNodes=function(ele){
    var childArr=ele.children || ele.childNodes;
    children=new Array();
    for(var i=0;i<childArr.length;i++){
      if(childArr[i].nodeType==1){
          children.push(childArr[i]);
      }
   }
};
獲取上一個兄弟節(jié)點
/*nextSibling,previousSibling都會將空格或者換行當(dāng)做節(jié)點處理
   nextElementSibling,priviousElementSibling 直接返回元素節(jié)點
*/
function getPreviousElementSibling(ele) {    
     if(ele.previousElementSibling) {    
        return ele.previousElementSibling;    
     } else {    
           do {     
           ele= ele.previousSibling;     
            } while ( ele && ele.nodeType !== 1 );       
          return ele;    
  }   
}  ;   
getPreviousElementSibling(document.getElementById('patty'));
獲取下一個兄弟節(jié)點與獲取上一個兄弟節(jié)點類似

getNextElementSibling(ele)

獲取第一個和最后一個兄弟節(jié)點
/*firstChild,lastChild都會將空格或者換行當(dāng)做節(jié)點處理
   firstElementChild,lastElementChild 直接返回元素節(jié)點
  這里只列舉第一個孩子
*/
 function getFirstElementChild(ele) {    
     if(ele.firstElementChild) {    
        return ele.firstElementChild;    
     } else {    
           do {     
           ele=getNextElementSibling(ele) ;     
            } while ( ele && ele.nodeType !== 1 );       
          return ele;    
  }   
}  ;

2.插入節(jié)點

JS提供appendChild(),insertBefore()兩個方法插入節(jié)點

插入新的子節(jié)點
var span = document.createElement('span');
document.querySelector('div').appendChild(span);
在指定節(jié)點前插入子節(jié)點
var patty = document.getElementById('patty');
var span = document.createElement('span');
patty.parentNode.insertBefore(span, patty);

/*更簡單的*/
patty.insertAdjacentHTML('beforeBegin', '<span></span>');
在指定節(jié)點后插入子節(jié)點
function insertAfter(ele, newNode){
    if(ele.nextElementSibling) {
        ele.parentNode.insertBefore(newNode, ele.nextElementSibling);
     } else {
       ele.parentNode.appendChild(newNode);
    }
}
var patty = document.getElementById('patty');
var span = document.createElement('span');
insertAfter(patty, span);

/*更簡單的*/
patty.insertAdjacentHTML('afterEnd', '<span></span>');

3.刪除節(jié)點

JS只提供removeChild()刪除節(jié)點

var  patty= document.getElementById('patty');
patty.parentNode.removeChild(patty);

4.清空節(jié)點

var  patty= document.getElementById('patty');
patty.innerHTML=' ';

5.判斷節(jié)點是否存在

document.getElementById('patty')!==null;
document.querySelectorAll(''div).length>0;

6.遍歷節(jié)點

/*IE的數(shù)組類型沒有forEach函數(shù)
  array.forEach(function(currentValue, index, arr), thisValue)
*/
function forEach(elems, callback) {
     if([].forEach) {
        [].forEach.call(elems, callback);
     } else {
        for(var i = 0; i < elems.length; i++) {
        callback(elems[i], i);   }
      }
}

var div = document.querySelectorAll('div');
forEach(div, function(elem, i){

});

7.復(fù)制節(jié)點

document.getElementById('patty').cloneNode(true);

8.獲取/設(shè)置節(jié)點的內(nèi)容

獲?。O(shè)置節(jié)點內(nèi)的內(nèi)容

/*獲取*/
 document.querySelecotr('div').innerHTML
 var  div= document.querySelector('div');
 div.textContent  || div.innerText;
/*設(shè)置*/
 document.querySelecotr('div').innerHTML = '<span>abc</span>';
 document.querySelecotr('div').textContent = 'abc'

獲?。O(shè)置包含節(jié)點本身的內(nèi)容

/*獲取*/
document.getElementById('patty').outerHTML
/*設(shè)置*/
document.getElementById('patty').outerHTML="<div>pattyzzh</div>";

獲?。O(shè)置表單的內(nèi)容

/*獲取*/
document.querySelector('input').value;
/*設(shè)置*/
document.querySelector('input').value="pattyzzh";

9.屬性操作

判斷是否設(shè)置屬性

document.getElementById('pattyzzh').hasAttribute('class');

獲取屬性

document.getElementById('pattyzzh').getAttribute('class');

刪除屬性

document.getElementById('pattyzzh').removeAttribute('class');

設(shè)置屬性

document.getElementById('pattyzzh').setAttribute('class',‘patty’);

10.CSS樣式操作

/*設(shè)置樣式*/
document.getElementById('pattyzzh').style.color = '#e4e4e4';
/*獲取樣式
萬惡的ie只支持currentStyle
*/
var getStyle = function(dom, attr) {   
     return dom.currentStyle ? dom.currentStyle[attr] : getComputedStyle(dom, false)[attr];  
   };

getStyle(document.getElementById('pattyzzh'), 'color');
/*獲取偽類的樣式(ie不支持)*/
window.getComputedStyle(el , ":after")[attrName];

11.Class操作

新增類

function addClass(elem, className) {
       if(elem.classList) {
         elem.classList.add(className);
       } else {
       elem.className += ' ' + className;
     }
}

addClass(document.getElementById('test'), 'a');

刪除類

function removeClass(ele, className) {
    if(ele.classList) {
       ele.classList.remove(className);
      } else {
      ele.className = ele.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
     }
}
removeClass(document.getElementById('pattyzzh'), 'patty');

判斷是否包含類

function hasClass(ele, className) {
  if(ele.classList) {
    return ele.classList.contains(className);
  } else {
    return new RegExp('(^| )' + className + '( |$)', 'gi').test(ele.className);

  }
}
hasClass(document.getElementById('pattyzzh'), 'patty');

12.字符串操作

/*去除空格*/
function trim(str){
     if(str.trim) {
       return str.trim();
      } else {
       return str.replace(/^\s+|\s+$/g, '');
  }
}
trim(' pattyzzh ');

/*JSON序列化*/
JSON.stringify({name: "pattyzzh"})

/*JSON反序列化*/
JSON.parse('{ "name": "pattyzzh" }')

好了,第一部分先寫這么多,下次見??!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、JS前言 (1)認(rèn)識JS 也許你已經(jīng)了解HTML標(biāo)記(也稱為結(jié)構(gòu)),知道了CSS樣式(也稱為表示),會使用HT...
    凜0_0閱讀 2,913評論 0 8
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 我們首先要明白,我們給頁面添加效果用到的js到底是什么?js其實包含三部分:dom 文檔對象模型 bom 瀏覽...
    一直以來都很好閱讀 867評論 0 0
  • 【原文】 子曰:“飯疏食飲水,曲肱而枕之,樂亦在其中矣。不義而富且貴,于我如浮云。” 【注釋】 (1)飯疏食,飯,...
    小綠植物閱讀 1,084評論 0 0
  • 今天的晨讀材料《博弈心理學(xué)》非常有意思,介紹了三個我完全不知道的心理學(xué)概念。好像很虛無的概念,當(dāng)遇上生活瑣碎,變得...
    貓小開閱讀 686評論 0 49

友情鏈接更多精彩內(nèi)容