是否可以在JavaScript中保存对尚未存在的元素的引用?

时间:2014-02-15 13:21:58

标签: javascript html variables dom

我之前试过问这个问题,但很难解释。所以我在这里试着改写它。

这是我的HTML正文:

<bod>
<div id="foo"></div>
<div id="bar"></div>
</body>

在JavaScript中,我调用一个函数,将节点引用作为参数。其中一些存在,一些不存在。

myElements([document.getElmentById('foo'), document.getElmentById('bar'), document.getElmentById('peaches'), document.getElmentById('oranges')]);
//foo and bar exist, peaches and oranges don't

function myElements(list){
window.list = list; //list returns [element], [element], null, null
}

我遇到的问题是,当我在 桃子 oranges 之后调用变量window.list 时,它们未被引用,因为它们在window.list中为null。 有什么办法可以保存对尚未创建的元素的引用。我不能使用class,id等,因为我正在动态创建这些元素。

谢谢!

4 个答案:

答案 0 :(得分:1)

  

有没有办法可以保存对尚未创建的元素的引用。

没有。但请参见下文。

  

我不能使用class,id等,因为我正在动态创建这些元素。

使用id s。

要做的最好的事情就是让创建元素的代码然后使用已创建的元素调用函数。如果由于某种原因你不能这样做,其他任何东西基本上都是一种解决方法。

一种解决方法是轮询:您设置了一个计时器以进行检查。

myElements(['foo', 'bar', 'peaches', 'oranges']);

function myElements(list){

    window.list = list;
    findElements();

    function findElements() {
        var n, element, entry, repeat = false;
        for (n = 0; n < window.list.length; ++n) {
            entry = window.list[n];
            if (typeof entry === "string") {
                element = document.getElementById(entry);
                if (element) {
                    window.list[n] = element;
                }
                else {
                    repeat = true;
                }
            }
        }
        if (repeat) {
            setTimeout(findElements, 50); // Do it again, 50ms later
        }
    }
}

这将继续尝试找到元素,直到它们全部找到。

答案 1 :(得分:1)

似乎没有明确的方式你想要它。要引用对象,您需要它存在。

但是,如果您的目标实际上是引用尚未显示的对象,则可以使用

创建这些对象。
var htmlElement = document.createElement(elem);

此时不将其附加到DOM。通过这个你得到一个参考。然后,当它实际上需要可见时,您只需将其添加到dom中

parent.appendChild(htmlElement)

答案 2 :(得分:0)

您无法引用不存在的内容,因为该引用尚不存在。所以除非你能找到其他方法来识别这些项目(看起来他们有ID,所以我不明白为什么你不能使用它们),你运气不好。

答案 3 :(得分:0)

不,不能做到。

为什么不在以后选择这些元素,当你尝试使用它们时呢?

另一种方法是听取文件准备就绪,(或者只是在</body>然后选择它们之前将你的javascript放在正确位置。