Javascript节点属性详解

作者: luichooy | 来源:发表于2016-06-20 14:12 被阅读147次

根据DOM,HTML文档中的每个成分都是一个节点。

整个文档就是一个文档节点
每个HTML标签是一个元素节点
包含在HTML元素中的文本是文本节点
每一个HTML属性是一个属性节点
注释属于注释节点

一、如何获得节点的引用

1.旧的获取节点引用的方式
  getELementById();
  getElementsByName();
  getElementsByTagName();

  -----------------
  劣势:
      1.浪费内存;
      2.逻辑性不强。
  -----------------

2.通过节点 关系属性获得节点的引用
  对象.parentNode          获得父节点的引用
  对象.childNodes          获得子节点的集合
  对象.firstChild          获得第一个子节点的引用
  对象.lastChild           获得最后一个子节点的引用
  对象.previousSibling     获得上一个兄弟节点的引用
  对象.nextSibling         获得下一个兄弟节点的引用

  --------------
  劣势:
      兼容性不好
  --------------

二、节点的信息(属性)

            节点类型         节点名字             节点值
            nodeType         nodeName            nodeValue 

元素节点        1             标签名                null
属性节点        2             属性名               属性值
文本节点        3              #text                文本
注释节点        8             #comment           注释的文字
文档节点        9             #document             null

三、兼容性函数

1.获得所有子节点的兼容方法
  function getChilds(obj){
      var childs=obj.childNodes;
      var arr=[];
      for(var i=0;i<childs.length;i++){
          if(childs[i].nodeType==3 && /^\s+$/.test(childs[i].nodeValue)){
              continue;
          }else{
              arr.push(childs[i]);
          }
      }
      return arr;
  }

2.获得最后一个子节点的兼容性方法
  funtion getLastChild(obj){
      var last=obj.lastChild;
      while(last.nodeType==3 && /^\s+$/.test(last.nodeValue)){
          last=last.previousSibling;
      }
      return last;
  }

3.获得第一个子节点的兼容性方法
  function getFirstChild(obj){
      var first=obj.firstChild;
      while(first.nodeType==3 && /^\s+$/.test(first.nodeValue)){
          first=first.nextSibling;
      }
      return first;
  }

4.获得上一个兄弟节点的兼容性方法
  function getPreSibling(obj){
      var preSibling=obj.previousSibling;
      while(preSibling.nodeType==3 && /^\s+$/.test(preSibling.nodeValue)){
          preSibling=preSibling.previousSibling;
      }
      return preSibling;
  }

5.获得下一个兄弟节点的兼容性方法
  function getNextSibling(obj){
      var nextSib=obj.nextSibling;
      while(nextSib.nodeType==3 && /^\s+$/.test(nextSib.nodeValue)){
          nextSib=nextSib.nextSibling;
      }
      return nextSib;
  }

四、实例:实现点击切换 隐藏和显示 两种状态

1.dom节点:
  <body>
    <ul>
        <li class="one">第一选项</li>
        <li>
            <ul>
                <li>第一</li>
                <li>第二</li>
                <li>第三</li>
            </ul>
        </li>
    </ul>
    <ul>
        <li class="one">第二选项</li>
        <li>
            <ul>
                <li>第一</li>
                <li>第二</li>
                <li>第三</li>
            </ul>
        </li>
    </ul>
    <ul>
        <li class="one">第三选项</li>
        <li>
            <ul>
                <li>第一</li>
                <li>第二</li>
                <li>第三</li>
            </ul>
        </li>
    </ul>
</body>

2.script代码:
<script>
    window.onload=function(){
        var lis=document.getElementsByClassName('one');
        for(var i=0;i<lis.length;i++){
            lis[i].onclick=function(){
                if(nextNode(this).style.display==""){
                    nextNode(this).style.display="none";
                }else{
                    nextNode(this).style.display="";
                }
            }
        }
        function nextNode(obj){
            var nexts=obj.nextSibling;
            while(nexts.nodeType==3){
                nexts=nexts.nextSibling;
            }
            return nexts;
        }
    }
</script>

相关文章

网友评论

    本文标题:Javascript节点属性详解

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