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