代码之家  ›  专栏  ›  技术社区  ›  Ood

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

  •  -1
  • Ood  · 技术社区  · 11 年前

    我以前试过问这个问题,但很难解释。所以在这里,我将尝试重新表述它。

    这是我的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
    }
    

    我遇到的问题是,当我调用变量window.list时 之后 桃子 橘子 因为它们在window.list中为空,所以没有引用它们。 是否有任何方法可以保存对尚未创建的元素的引用。我 不能 使用class、id等,因为我是动态创建这些元素的。

    谢谢

    4 回复  |  直到 10 年前
        1
  •  1
  •   T.J. Crowder    11 年前

    是否有任何方法可以保存对尚未创建的元素的引用。

    没有,但请参见下文。

    我不能使用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
            }
        }
    }
    

    这将继续努力寻找元素,直到找到所有元素。

        2
  •  1
  •   patryk    11 年前

    它似乎不可能以你想要的方式显式地实现。要引用一个对象,你需要它存在。

    然而,如果您的目标实际上是引用 尚不可见 ,可以使用

    var htmlElement = document.createElement(elem);
    

    而不在该点将其附加到DOM。这样你就可以参考这个了。然后,当它确实需要可见时,只需使用

    parent.appendChild(htmlElement)
    
        3
  •  0
  •   Scott Hunter    11 年前

    你不能引用不存在的东西,因为引用还不存在。因此,除非你能找到其他方法来识别这些物品(看起来它们有ID,所以我不明白你为什么不能使用它们),否则你就没有运气了。

        4
  •  0
  •   amenthes    11 年前

    不,这是不可能的。

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

    另一种方法是监听文档就绪(或者简单地将javascript放在前面 </body> 然后 选择它们。