2013-03-07 52 views
4

getElementById()位于document对象上。getElementById()为元素的子元素

如果我已经有一个元素参考,我怎么能找到有给定ID的孩子(或孩子的孩子等)?

var parent = document.getElementById(parentId), 
    child = parent.getElementById(childId); 

此代码失败,因为页面上的普通元素没有getElementById方法。

(我处于维护模式,ID不一定是唯一的,并且不能使用jQuery)。

+0

你可以展示一些初步认识代码.... – 2013-03-07 10:36:49

+2

为什么你的ID不是唯一的,什么理由?如果(出于某种奇怪的原因,我想不出来),你必须有非唯一的ID,你可以使用'getElementsByTagName'或类似的东西。 – 2013-03-07 10:39:13

+0

这没有任何意义。这意味着你想要多次分配相同的ID。 – Amberlamps 2013-03-07 10:41:46

回答

1

你可以自己循环所有的子节点吗?

像这样的东西可能:

GetChildElementByID = function (rootElement, id){ 
    var children = GetAllNodes(rootElement); 
    for(var i in children){ 
     var element = children[i]; 
     if(element.id == id){ 
      return element; 
     } 
    } 
    return null; 
} 

GetAllNodes = function (rootElement) { 
    var nodes = []; 
    var childNodes = rootElement.childNodes; 
    for (var i in childNodes) { 
     var node = childNodes[i]; 
     if (node.nodeType) { 
      nodes.push(node); 
     } 
     nodes.push.apply(nodes, GetAllNodes(node)); 
    } 
    return nodes; 
}