• DOM(2)获取子节点


    1.节点:元素节点,属性节点,文本节点

    (1)childNodes  返回子节点集合,各浏览器有区别,非ie文本、换行(只在两个子节点间) 也算作子节点

         <div id="box">12
                <div>1</div>
                <div>2</div>
                <p>3</p>
            </div>
                    
            <script>
                
                var box =document.getElementById('box');
                alert(box.childNodes.length);//ie返回4,非ie返回7
                for (var i = 0; i < box.childNodes.length; i ++) {
                    if (box.childNodes[i].nodeType === 1) {
                        alert('元素节点:' + box.childNodes[i].nodeName);
                    } else if (box.childNodes[i].nodeType === 3) {
                        alert('文本节点:' + box.childNodes[i].nodeValue);
                    }
                }
                
                //非ie会把文本、换行也算在里面;ie只返回正常元素节点

         
    </script>

    (2)firstChild , lastChild 获取的是第一个子节点与最后一个子节点,相当于childNodes[0],childNodes[box.childNodes.length-1] ,非ie也会包含文本 或空格,

         <div id="box">| 
                12  |
                <div>1</div>
                <div>2</div>
                <p>3</p>
            </div>                
            <script>            
                var box =document.getElementById('box');
                alert(box.firstChild.nodeValue);
                alert(box.childNodes[0].nodeValue);
                alert(box.childNodes[box.children.length-1].nodeValue);
                alert(box.lastChild.nodeValue);            
            </script>

    (3)previousSibling 与nextSibling ,分别表示获取同级节点的上一个节点 ,下一个节点 ,  (包含文本,换行) ,同上有ie与非ie的区别

       parentNode 表示返回节点的父节点,该父节点肯定是元素节点(标签)

         
    <p>0</p>
    <
    div id="box">123</div> <span>123</span> <script> var box =document.getElementById('box'); alert(box.nextSibling.nodeName); //ie返回span ,跳过div与span间的换行;非ie返回#text ,表示为文本节点 即换行
            alert(box.previousSibling.nodeName); //ie返回p ,跳过div与span间的换行;非ie返回#text ,表示为文本节点 即换行
            alert(box.parentNode.nodeName); //返回BODY ,chrome Firefox ie都支持
        </script>

    (4)attributes ,返回属性的集合

         <div id="box" title="标题" class="mybox" style="color:red;font-size:16px;">123</div>    
            <script>            
                var box =document.getElementById('box');    
                alert(box.attributes);
                alert(box.attributes.length); //4
                alert(box.attributes[0].nodeName); //id , ie8是title,顺序不一样
                alert(box.attributes[0].nodeValue);//box
                for(var i=0; i<box.attributes.length;i++){
                    alert('属性名:'+box.attributes[i].nodeName+'属性值:'+box.attributes[i].nodeValue);
                }         
            //ie8(别的版本未测)返回的顺序是乱的,
    </script>

    2. 忽略、移除空白节点

    <script>

      //忽略空白字符
      function filterWhiteNode(node) {
        var ret = [];
        for (var i = 0; i < node.length; i ++) {
          if (node[i].nodeType === 3 && /^s+$/.test(node[i].nodeValue)) {
            continue;
          } else {
            ret.push(node[i]);
          }
        }
        return ret;
      }

    </script>

      

      //移除空白节点
        function removeWhiteNode(node) {
          for (var i = 0; i < node.childNodes.length; i ++) {
            if (node.childNodes[i].nodeType === 3 && /^s+$/.test(node.childNodes[i].nodeValue)) {
              node.childNodes[i].parentNode.removeChild(node.childNodes[i]);
            }
          }
          return node;
        }

        alert(removeWhiteNode(box).childNodes.length); //返回移除后,的子节点个数

     //注:获取子节点可以用 children ,可以直接跳过空白节点, 如 , alert(box.children.length)

  • 相关阅读:
    【转】CUDA5/CentOS6.4
    【转】centos 6.4 samba 安装配置
    【转】Install MATLAB 2013a on CentOS 6.4 x64 with mode silent
    【转】Getting xrdp to work on CentOS 6.4
    【VLFeat】使用matlab版本计算HOG
    Unofficial Windows Binaries for Python Extension Packages
    March 06th, 2018 Week 10th Tuesday
    March 05th, 2018 Week 10th Monday
    March 04th, 2018 Week 10th Sunday
    March 03rd, 2018 Week 9th Saturday
  • 原文地址:https://www.cnblogs.com/luhailin/p/6604704.html
Copyright © 2020-2023  润新知