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经常与其他DOM方法一起描述为适用于任何节点,但实际上它仅适用于文档。好,谢谢。 – 2010-10-10 23:54:27