2011-06-08 94 views
5

這可能很瘋狂,但它很吸引我很長一段時間:)變量如何將其值綁定到DOM?

我想知道一個javascript變量可以如何綁定自己的DOM後,它被附加到身體,例如?

var p = document.createElement('p'); 
p.innerHTML = 'Hello World'; 

document.body.appendChild(p); 

所以現在我有這個p變量,它包含了特定段落的精確參考無論身在何處,它位於身體內部。

p.innerHTML = 'new content'; 

會很容易找到的段落,並改變其值

所以我的問題是......這種結合是怎麼做?

如果我想在變量消失後重新創建它? 有沒有辦法再次附加,而不必通過DOM運行並找到它?

我在想,DOM內部的每個節點都有其特定的標識符,它不是id屬性,而是稍後可以引用的某種UUID?

,如:

console.log(p.localName); //aoi12e2kj2322444r4t 
p = null; 

,所以我仍然可以恢復以爲這UUID那款的節點?

在這種環境下,我不會訪問任何外部節點的屬性,例如nameiddata等。

所以我很好奇,想知道變量和DOM節點之間是如何創造了這個結合?

回答

0

在第一行創建綁定,將第document.createElement的結果分配給p。這與其他任何時候將某些內容分配給變量時沒有任何區別,變量始終將變量名稱綁定到該值。就腳本而言,沒有其他綁定發生。 p是一個HTMLElement,這就是所有暴露的元素。

請注意,對於p.innerHTML = 'new content';,不必找到該元素,因爲p已經指向該元素。 DOM就是這樣做的:它公開文檔和文檔元素。

如果您稍後需要對同一元素進行另一次引用,則必須使用DOM方法(例如getElementById)來查找它。這就是他們在那裏。至於DOM如何公開元素,這是在內部實現的,並且因瀏覽器,瀏覽器或庫到庫而不同(因爲DOM不僅僅用於瀏覽器)。

+0

謝謝@outis,我唯一關心的是使用'id'來打破/覆蓋引用元素的css規則,因爲我會在使用元素的時候創建uuids。然後我可以通過只分配這個uuid來找回它們...我更喜歡'id',因爲它是找到正確的最快的一個?我也想過數據集,但我想通過它的數據集發現元素會引發比鏈接id慢得多的進程....並且每個元素只能有一個「id」,這是正確的...:/ I仍然在想什麼是最好的選擇,非常感謝你輸入壽 – zanona 2011-06-08 12:28:16

1

我相信它會根據您使用的瀏覽器而變化。沒有標準的方法來做到這一點。目前你可以使用id或遍歷dom,直到達到你想要的元素。