getElementById无法在节点上工作
问题描述:
在这个简单的脚本中,我收到错误“obj.parentNode.getElementById不是函数”,我不知道,什么是错的。getElementById无法在节点上工作
<script type="text/javascript">
function dosomething (obj) {
sibling=obj.parentNode.getElementById("2");
alert(sibling.getAttribute("attr"));
}
</script>
<body>
<div>
<a id="1" onclick="dosomething(this)">1</a>
<a id="2" attr="some attribute">2</a>
</div>
</body>
答
.getElementById()
是document
,像这样:
document.getElementById("2");
由于ID被应该是独特,没有必要为一种方法,其通过相对ID查找元素的任何其它元件(在这种情况下,在该父母的内部)。此外,如果使用HTML4,则不应以数字开头,编号为的数字为在HTML5中有效。
答
document.getElementById()
将不起作用,如果该节点是动态创建的,但尚未附加到主文档dom中。
例如在Ajax中,并非所有节点都连接在任何给定点上。在这种情况下,你要么需要一个手柄明确追踪到每一个节点(通常为最佳性能),或使用类似这样找对象备份:
function domGet(id , rootNode) {
if (!id) return null;
if (rootNode === undefined) {
// rel to doc base
var o = document.getElementById(id);
return o;
} else {
// rel to current node
var nodes = [];
nodes.push(rootNode);
while (nodes && nodes.length > 0) {
var children = [];
for (var i = 0; i<nodes.length; i++) {
var node = nodes[i];
if (node && node['id'] !== undefined) {
if (node.id == id) {
return node; // found!
}
}
// else keep searching
var childNodes = node.childNodes;
if (childNodes && childNodes.length > 0) {
for (var j = 0 ; j < childNodes.length; j++) {
children.push(childNodes[j]);
}
}
}
nodes = children;
}
// nothing found
return null;
}
}
答
更换.getElementById(ID)与.querySelector( '#' + ID);
因此,尽管getElementById经常与其他DOM方法一起描述为适用于任何节点,但实际上它仅适用于文档。好,谢谢。 – 2010-10-10 23:54:27