在新创建的DOM对象插入文档之前使用getElementById - 如何?

时间:2010-12-11 03:57:37

标签: javascript dom

除非将DOM元素附加到文档,否则无法使用getElementById方法。在将DOM元素附加到文档之前,我可以通过什么方法或机制来访问和修改它?

我有一个大的DOM元素,我想访问它的一部分。我经常使用getElementById,但DOM元素没有附加到文档。

var element = document.createElement("div");  
element.id = 'testqq';  
var el = document.getElementById('testqq'); // el will be null!

来源:https://developer.mozilla.org/en/dom/document.getelementbyid

我正在寻找一个不使用jQuery的答案。我喜欢jQuery,但它不是我当前问题的选择。

2 个答案:

答案 0 :(得分:4)

嗯,您已经使用element变量引用了它。

但我敢打赌,你的意思是你想要嵌入里面的东西。如果这是正确的,您可以使用getElementsByTagName('*'),然后迭代返回的集合,测试ID属性,直到找到您的。

var div = document.createElement('div');

div.innerHTML = '<p>yo</p><div><span id="tester">hi</span></div>';

var all = div.getElementsByTagName('*');

   // search for element where ID is "tester"
for (var i = 0, len = all.length; i < len; i++) {
    if (all[i].id === 'tester') {
        var result = all[i];
        break;
    }
}

alert( result.id );

在尝试循环之前,您可以测试浏览器是否支持querySelectorAll,如果是,请使用它。

if( div.querySelectorAll ) {
    var result = div.querySelectorAll('#tester');
} else {
    // Do the loop with getElementsByTagName()
}

答案 1 :(得分:0)

document.createElement函数返回一个新的元素对象,但该元素在DOM 中不存在,直到您插入

文档对象无法回忆您要求它创建的元素,因此当您调用document.getElementById('testqq')时,它完全不知道您在寻找什么。

在您的示例中,您已经对该元素的引用。你为什么要问文件呢?