2014-02-15 55 views
-1

我曾試圖問過這個問題,但這很難解釋。所以在這裏我要試着去重述它。是否可以在JavaScript中保存對尚未存在的元素的引用?

這是我的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 桃子橘子已經建立,他們沒有被引用,因爲他們是在窗口空.LIST。 有什麼辦法可以保存對尚未創建的元素的引用。我不能使用類,ID等,因爲我動態地創建這些元素。

謝謝!

+0

爲什麼在創建元素時不添加動態創建的元素? –

+0

你想用這個清單做什麼?如果一個元素還不存在,那麼引用它就不是很有用。如果你想在元素存在的時候立即使用它,你可以調用'myElements'函數,對吧?或者設置一個暫時檢查元素是否存在的超時值。 –

回答

1

有什麼辦法可以保存對尚未創建的元素的引用。

不,但請參閱下文。

我不能使用class,id等,因爲我正在動態創建這些元素。

使用id秒。

要做的最好的事情就是讓代碼創建元素,然後使用已創建的元素調用函數。如果因爲某些原因你不能這樣做,其他任何東西基本上都是一種解決方法。

一個這樣的解決方法是輪詢:您設置了一個計時器來檢查。

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 
     } 
    } 
} 

這將繼續嘗試查找元素,直到找到它們全部。

0

您不能引用不存在的內容,因爲引用尚不存在。所以除非你能找到其他方法來識別這些物品(看起來他們有ID,所以我不明白你爲什麼不能使用它們),那麼你的運氣不好。

+0

這只是一個讓事情變得更簡單的例子。其實我*不*使用ID。 – Ood

0

不,它不能完成。

爲什麼不在以後選擇元素,當你嘗試使用它們?

另一種方法是偵聽文件準備好,(或者乾脆把你的JavaScript右</body>在此之前選擇它們。

1

這似乎並不能夠明確你想要的方式。要引用一個對象,你需要它存在。

然而,如果你的目標實際上是引用一個對象尚未出現,你可以用

var htmlElement = document.createElement(elem); 

創建這些沒有在這一點上它附加到DOM。由此你可以得到這個參考。然後,當它實際需要可見時,您只需將其添加到dom中即可。

parent.appendChild(htmlElement) 
相關問題