如何获取JS中的所有childNodes,包括所有'孙子'?

时间:2011-11-30 06:15:15

标签: javascript

我想扫描所有childNodes的div,包括那些位于其他元素中的childNodes。现在我有这个:

var t = document.getElementById('DivId').childNodes;
for(i=0; i<t.length; i++) alert(t[i].id);

但它只能得到分区的孩子而不是孙子孙女。谢谢!

编辑:这个问题太模糊了。对于那个很抱歉。这是一个小提琴:

http://jsfiddle.net/F6L2B/

body.onload脚本不能在JSFiddle上运行,但它可以工作,除了“Me Second”和“Me Third”输入字段没有被分配tabIndex,因此被跳过。

3 个答案:

答案 0 :(得分:66)

这是最快速,最简单的方式,适用于所有浏览器:

myDiv.getElementsByTagName("*")

答案 1 :(得分:17)

如果您在现代浏览器上查找所有HTMLElement,可以使用:

myDiv.querySelectorAll("*")

答案 2 :(得分:10)

曾孙子呢?

要任意深入,你可以使用递归函数。

var alldescendants = [];

var t = document.getElementById('DivId').childNodes;
    for(i = 0; i < t.length; i++)
        if (t[i].nodeType == 1)
            recurseAndAdd(t[i], alldescendants);

function recurseAndAdd(el, descendants) {
  descendants.push(el.id);
  var children = el.childNodes;
  for(i=0; i < children.length; i++) {
     if (children[i].nodeType == 1) {
         recurseAndAdd(children[i]);
     }
  }
}

如果你真的只想要孙子,那么你可以取出递归(并可能重命名函数)

function recurseAndAdd(el, descendants) {
  descendants.push(el.id);
  var children = el.childNodes;
  for(i=0; i < children.length; i++) {
     if (children[i].nodeType == 1) {
         descendants.push(children[i].id);
     }
  }
}