2014-07-19 22 views
3

我想產生這樣的節點:如何生成DOM節點與無價值的屬性

<div layout horizontal></div> 

使用DOM API。

我想是這樣的:

var d = document.createElement("div"); 
d.setAttribute(...); 

但從來沒有真正管理帶來我想要的東西。任何想法如何做到這一點?

謝謝。

+1

請,採取一看[新月新鮮的答案](http://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-內置dom-methods-pro-pro) –

回答

4

您的問題的主題反映了這裏的基本困惑。沒有這種「無價值的屬性」。在HTML中只有一種語法便利性,用於編寫沒有特定值的屬性,只要屬性的存在意味着某種東西,無論其值如何。

所以,你可以寫<input required><input required='true'><input required='false'><input required='notrequired'>,它意味着同樣的事情(這是輸入需要)。

當您嘗試「打印」,用您的話來說,「無價值」屬性,負責「打印」的人可能會選擇「對您好」,並且表示沒有價值的屬性,而不是顯示空的字符串。但是,這不會改變屬性確實具有空字符串的值,這可以通過簡單地通過elt.getAttribute並直接檢查屬性值來看到。例如,如果我創建了一個新的div,然後將其內部HTML設置爲<input required="">,那麼某些環境(例如Chrome devtools)將顯示該元素爲<input required>而不是<input required="">。換句話說,它只是在進出的路上的語法糖。

一旦我已經創建了一個元素具有「毫無價值」的屬性,這實際上是一個空字符串,也許我就可以使它真正毫無價值通過設置屬性值null?不。 elt.setAttribute('required', null)僅將屬性值設置爲字符串"null"undefined也一樣。

請注意,DOM規範在Attr對象上指定了specified的屬性。然而,據我所知,這似乎並沒有被使用,因爲由document.createAttribute創建的屬性總是將specified設置爲true,通過解析HTML創建的屬性如x.innerHTML = '<input required>';始終將specified設置爲true,等specified標記爲只讀,所以無法檢查設置爲false的影響是什麼。

無論如何,你的目標是什麼?你爲什麼認爲你需要這樣做?

+0

雖然確實需要輸入='true'>'或''或''會在大多數瀏覽器中工作,根據HTML5規範......實際上,「true」和「false」被明確禁止。根據規範,唯一允許的布爾屬性值是空字符串或屬性名稱:http://www.w3.org/html/wg/drafts/html/master/infrastructure.html#boolean-attributes – Martin

1

您可以使用元素的setAttributeNode方法追加與createAttribute創建屬性節點:

var el = document.createElement('div'), 
    attr = document.createAttribute('layout'); 

el.setAttributeNode(attr); 
+0

'createAttribute'返回一個屬性,其值被設置爲一個空字符串 –

+0

@ Dr.Molle,只要它打印爲我想要的,我認爲它是可以的。 createAttribute不會添加像'attr =「」'這樣的屬性。 – sinan

+0

有趣的是,我知道'.setAttribute(「layout」,「」);'也不會生成'attr =「」'。 – sinan

1

您正在尋找createAttribute()setAttributeNode()方法。

var elelement = document.createElement('div'), 
var attribute = document.createAttribute('layout'); 
var attribute2 = document.createAttribute('horizontal'); 
element.setAttributeNode(attribute); 
element.setAttributeNode(attribute2); 
1

只需將一個屬性設置爲空字符串即可。

element.setAttribute('hidden', '') 
+0

爲什麼downvote?將它設置爲空字符串在html5中是完全有效的;事實上,將它設置爲任何其他*除空字符串或屬性名稱明確*不*有效: 「如果該屬性存在,它的值必須是空字符串或ASCII值的值與屬性的規範名稱無關,不帶前導或尾隨空白。「 (http://www.w3.org/html/wg/drafts/html/master/infrastructure.html#boolean-attributes) – Martin

相關問題