日期:2014-05-16  浏览次数:20369 次

求助,如何获得元素下的一个节点

<div id="parent">
  <div id="child1">
     <div id="child11"></div>
  </div>
  <div id="child2"></div>
</div>


 var parent = document.getElementById("parent");
 

获得了父元素parent的情况下怎么根据父元素parent获取其下面的子节点,如获取child1,child11,不要直接用getElementById,求大神解答

------解决方案--------------------
遍历childNodes

<div id="parent">
  <div id="child1">
     <div id="child11"></div>
  </div>
  <div id="child2"></div>
</div>
<script type="text/javascript">
    function getChildNode(childNodes, index) {
        var node = -1;
        for (var i = 0, j = childNodes.length; i < j; i++)
            if (childNodes[i].nodeType == 1) {
                node++;
                if (node == index) return childNodes[i];
            }
            return false;
    }
    window.onload = function () {
        var parent = document.getElementById("parent");
        var child1 = getChildNode(parent.childNodes, 0);
        alert(child1.id)
        var child11 = getChildNode(child1.childNodes, 0);
        alert(child11.id)
    }
</script>

------解决方案--------------------
DOM遍历有一系列接口的。

previousSibling //前一个节点
nextSibling  //下一个节点
firstChild  //第一个孩子
lastChild   //最后一个孩子
childNodes  //所有的孩子节点,nodeList类型的

以上是XML DOM标准接口,在其他语言的DOM实现中都是统一的。

但是以上接口有一个缺点,那就是文本节点也算节点。html为了格式美观,通常会保留换行和缩进。
于是,现代浏览器又提供了一系列类似的接口,用来只关心Element节点。

previousElementSibling
nextElementSibling
firstElementChild
lastElementChild
children

以上接口需现代浏览器才支持。