美文网首页jsWeb前端之路
原生JavaScript操作——节点操作

原生JavaScript操作——节点操作

作者: 卓三阳 | 来源:发表于2017-10-31 16:53 被阅读79次

    进入正题,开始学习JavaScript原生节点操作。

    1.查找节点

    获取一般节点(当然也可以获取特殊关系节点)

    按id查找

    document.getElementByID('patty');

    按class名查找

    document.getElementsByClassName('patty');

    按标签名查找

    document.getElementsByTagName('patty');

    统一查找

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

    获取特殊关系节点

    获取父节点

    document.getElementByID('patty').parentNode;

    获取元素子节点
    /*childNodes会返回指定元素的所有种类节点
      children只返回指定元素的元素节点,ie下包括注释节点
    */
    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]);
          }
       }
    };
    
    获取上一个兄弟节点
    /*nextSibling,previousSibling都会将空格或者换行当做节点处理
       nextElementSibling,priviousElementSibling 直接返回元素节点
    */
    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'));
    
    获取下一个兄弟节点与获取上一个兄弟节点类似

    getNextElementSibling(ele)

    获取第一个和最后一个兄弟节点
    /*firstChild,lastChild都会将空格或者换行当做节点处理
       firstElementChild,lastElementChild 直接返回元素节点
      这里只列举第一个孩子
    */
     function getFirstElementChild(ele) {    
         if(ele.firstElementChild) {    
            return ele.firstElementChild;    
         } else {    
               do {     
               ele=getNextElementSibling(ele) ;     
                } while ( ele && ele.nodeType !== 1 );       
              return ele;    
      }   
    }  ;
    

    2.插入节点

    JS提供appendChild(),insertBefore()两个方法插入节点

    插入新的子节点
    var span = document.createElement('span');
    document.querySelector('div').appendChild(span);
    
    在指定节点前插入子节点
    var patty = document.getElementById('patty');
    var span = document.createElement('span');
    patty.parentNode.insertBefore(span, patty);
    
    /*更简单的*/
    patty.insertAdjacentHTML('beforeBegin', '<span></span>');
    
    在指定节点后插入子节点
    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.删除节点

    JS只提供removeChild()删除节点

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

    4.清空节点

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

    5.判断节点是否存在

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

    6.遍历节点

    /*IE的数组类型没有forEach函数
      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.复制节点

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

    8.获取/设置节点的内容

    获取/设置节点内的内容

    /*获取*/
     document.querySelecotr('div').innerHTML
     var  div= document.querySelector('div');
     div.textContent  || div.innerText;
    /*设置*/
     document.querySelecotr('div').innerHTML = '<span>abc</span>';
     document.querySelecotr('div').textContent = 'abc'
    

    获取/设置包含节点本身的内容

    /*获取*/
    document.getElementById('patty').outerHTML
    /*设置*/
    document.getElementById('patty').outerHTML="<div>pattyzzh</div>";
    

    获取/设置表单的内容

    /*获取*/
    document.querySelector('input').value;
    /*设置*/
    document.querySelector('input').value="pattyzzh";
    

    9.属性操作

    判断是否设置属性

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

    获取属性

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

    删除属性

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

    设置属性

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

    10.CSS样式操作

    /*设置样式*/
    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" }')
    

    好了,第一部分先写这么多,下次见!!

    相关文章

      网友评论

        本文标题:原生JavaScript操作——节点操作

        本文链接:https://www.haomeiwen.com/subject/tcsbpxtx.html