ОБНОВЛЕНИЕ: для тех, кто заинтересован в этом, вот реализация, которую я наконец использовал:
function isInDOMTree(node) {
// If the farthest-back ancestor of our node has a "body"
// property (that node would be the document itself),
// we assume it is in the page's DOM tree.
return !!(findUltimateAncestor(node).body);
}
function findUltimateAncestor(node) {
// Walk up the DOM tree until we are at the top (parentNode
// will return null at that point).
// NOTE: this will return the same node that was passed in
// if it has no ancestors.
var ancestor = node;
while(ancestor.parentNode) {
ancestor = ancestor.parentNode;
}
return ancestor;
}
Причина, по которой я этого хотел, - предоставить способ синтеза события onload
для элементов DOM. Вот эта функция (хотя я использую что-то немного другое, потому что я использую это в сочетании с MochiKit ):
function executeOnLoad(node, func) {
// This function will check, every tenth of a second, to see if
// our element is a part of the DOM tree - as soon as we know
// that it is, we execute the provided function.
if(isInDOMTree(node)) {
func();
} else {
setTimeout(function() { executeOnLoad(node, func); }, 100);
}
}
Например, эту настройку можно использовать следующим образом:
var mySpan = document.createElement("span");
mySpan.innerHTML = "Hello world!";
executeOnLoad(mySpan, function(node) {
alert('Added to DOM tree. ' + node.innerHTML);
});
// now, at some point later in code, this
// node would be appended to the document
document.body.appendChild(mySpan);
// sometime after this is executed, but no more than 100 ms after,
// the anonymous function I passed to executeOnLoad() would execute
Надеюсь, это кому-нибудь пригодится.
ПРИМЕЧАНИЕ: причина, по которой я выбрал это решение, а не ответ Даррила , заключалась в том, что метод getElementById работает только в том случае, если вы находитесь в одном и том же документе; У меня есть несколько фреймов на странице, и страницы взаимодействуют друг с другом сложным образом - когда я попробовал это, проблема заключалась в том, что он не мог найти элемент, потому что он был частью документа, отличного от кода, который он выполнял в .