2010-03-16 73 views
5

在DOM,是OK指元素的屬性是這樣的:在DOM中可以使用.notation獲取/設置屬性嗎?

var universe = document.getElementById('universe'); 
    universe.origin = 'big_bang'; 
    universe.creator = null; 
    universe.style.deterministic = true; 

?我的對象深深的敬意和他們的隱私,我感覺事情可能會去,如果我不小心可怕的錯誤,讓我想要做的一切更像是這樣的:

var universe = document.getElementById('universe'); 
    if(universe.hasAttribute('origin')) then universe.origin = 'big_bang'; 

etc... 

真的有必要使用這些訪問方法?當然,這可能或多或少是必要的,這取決於我是如何確定我正在操作的元素將具有我期望它們的屬性,但是一般來說,DOM人認爲使用.notation而不是getter和setter是可以的嗎?

謝謝!

回答

3

對於XML文檔,你必須使用getAttribute/setAttribute/removeAttribute等有沒有從JavaScript屬性映射到DOM屬性。

對於HTML文檔,您可以使用等使用getAttribute等來訪問屬性,但最好不要因爲IE6-7有問題而使用它。 DOM 2級HTML屬性不僅更可靠,而且更易於閱讀。

目前尚不清楚您是在此處使用XML還是HTML文檔。顯然origin不是HTML屬性; 「自定義」元素和屬性不應該包含在HTML文檔中。但目前還不清楚universe.style.deterministic是指什麼;如果沒有HTML style屬性,您將無法獲得CSS樣式查找。

+0

getElementById不查找。而「宇宙」絕對是HTML標籤的有效標識。 – 2010-03-16 13:26:23

+0

好點,我挑選了一個不看它的例子! :-)固定。 – bobince 2010-03-16 13:53:40

+1

這就是答案。 – 2010-03-16 14:29:37

3

是的,沒關係;-) 如果DOM中有一個屬性,可以直接設置它或直接獲取它。 沒有私人或只讀元素或任何東西。順便說一下,JavaScript沒有「then」關鍵字。

2

由於跨瀏覽器的問題,我一直使用的getAttribute和setAttribute:

if(!universe.getAttribute('origin')) 
{ 
    universe.setAttribute('origin', 'big_bang'); 
} 

我不記得具體細節,但我曾與物業風格universe.origin和動態創建的DOM元素的問題。

0

不,這樣做不好。 DOM對象的大多數屬性都可以被覆蓋。你不會毀掉瀏覽器的行爲,因爲它不使用DOM API。但是如果他們試圖使用被覆蓋的屬性的話,你會毀掉你的JS腳本。

我做的事情,當我有幾個屬性附加到一個對象(而不是一個單一的標記或鏈接)自己的路,是創建一個自定義對象,然後從DOM元素鏈接它:

var Universe = { 
    origin: "big_bang", 
    creator: null, 
    style: { deterministic: true } 
}; 
document.getElementById('universe')._universe = Universe; 
相關問題