2011-10-06 57 views
7

在JavaScript中,我們可以通過以下方式創建一個新的DOM元素...使用createAttribute而不是直接設置屬性?

通過使用createAttribute()+使用setAttributeNode()DOM方法:通過剛纔直接設置屬性

var input = document.createElement("input"), 
    type = document.createAttribute("type"); 

type.nodeValue = "text"; 
input.setAttributeNode(type); 
container.appendChild(input); 

或:

var input = document.createElement("input"); 

input.type = "text"; 
container.appendChild(input); 

後者可以最終被相當少很多代碼,甚至當只有每個元素的情侶屬性。

問題:有沒有人跑過後一種方法的任何缺點(直接設置屬性)?我在幾個瀏覽器(最新的FF,IE,Safari,Opera,舊的IE瀏覽器 - 甚至IE6工作)和基本測試(插入文本輸入的類型,名稱和maxLength屬性)上都測試了它們都通過了。 Here's the fiddle如果有人需要它。

回答

9
document.createAttribute 
document.createAttributeNS 
element.getAttributeNode 
element.getAttributeNodeNS 
... and a lot of others 

將在DOM4被棄用,因此不使用它,只是設定的setAttribute( 「名」, 「值」)

http://www.w3.org/TR/dom/#element

someinput.type是不同 基本上是做的快捷方式

setAttribute("type","text"); 
getAttribute("text"); 

希望這有助於!

element._some_attribute_ is not available for all attributes, just some: 
element.dir 
element.lang 
element.id 
...etc 
+2

使用'setAttribute()'和'getAttribute()'總是等價於使用相應的屬性,這並不完全正確。例如,'value'屬性(它總是反映輸入的當前值)與'value'屬性(僅代表初始值)分開存在。一個更明顯的例子是'style'屬性,它包含一個字符串,'style'屬性是'CSSStyleDeclaration'對象,每個單獨的樣式屬性都有單獨的屬性。 –

+0

我在哪裏說他們總是等價的? :P – 2013-07-26 11:57:37

+0

公平點,你沒有。不知道現在什麼促使我的評論。 –

相關問題