2016-03-23 63 views
-2

我想添加一個ID到一個特定的元素,它們都具有相同的類名這是一個例子,但它不會在這裏的例子工作是我正在嘗試。爲什麼我不能將ID添加到使用純javasctipt的元素? setattribute是不是一個函數

<div class = "ABC"> 
    <p> child </p> 
    </div> 

<div class = "ABC"> 
<p> child </p> 
</div> 

<div class = "ABC"> 
<p> child </p> 
</div> 


<div class = "ABC"> 
<p> child </p> 
</div> 


var ref = document.getElementsByClassName("ABC")[3]; 
var ref2child = ref.childNodes 
var addID = ref2child.setAttribute("id", "HOV") 

當我在控制檯看它說遺漏的類型錯誤:ref2child.setAttribute不是一個函數(...)

+1

開始:

試試這個。這不是一個元素。那麼你應該尋找'childNodes'的文檔。 –

+0

我知道它不是一個元素,但變量是引用我想要目標的子元素,當我在控制檯中鍵入ref2child它返回我想要的元素 – Jake

+0

您是否在實際代碼中缺少行終止符(;)? – Spidey

回答

0

ref.childNodes給你的節點列表,所以你需要告訴它通過添加索引,像這樣ref.childNodes[0]

由於ref.childNodes也返回文本節點,一個更好的方法很可能是ref.children

注:setAttribute方法沒有一個返回值

注2:當你運行它你代碼,請確保腳本在主體的末尾或onload/domready事件中執行,否則由於元素尚不可用,您將得到該錯誤。

var ref = document.getElementsByClassName("ABC")[3]; 
 
var ref2child = ref.children[0]; 
 
ref2child.setAttribute("id", "HOV"); 
 

 
/* this line is only for demo purpose, showing this method works */ 
 
ref2child.innerHTML += ref2child.getAttribute("id");
<div class = "ABC"> 
 
    <p> child </p> 
 
    </div> 
 

 
<div class = "ABC"> 
 
<p> child </p> 
 
</div> 
 

 
<div class = "ABC"> 
 
<p> child </p> 
 
</div> 
 

 

 
<div class = "ABC"> 
 
<p> child </p> 
 
</div>

+0

我試着你說的話,它說下面的未捕獲的類型錯誤:無法讀取未定義的屬性'子女' – Jake

+0

@Jake我更新了我的答案,所以它顯示它的工作原理。順便說一下,'setAttribute'方法沒有返回值 – LGSon

+0

@Jake當你在你的代碼上運行它時,確保腳本執行在主體的末尾或onload/domready事件中,否則你會得到這個錯誤,因爲元素還沒有可用 – LGSon

0

的setAttribute是沒有功能的子節點的集合。通過查看ref2child`的`值

var refs = document.getElementsByClassName("ABC"); 
var ref2child = refs[0]; 
ref2child.setAttribute("id", "HOV") 

// Now this should give you a reference to the item 
var itemWithId = document.getElementById('Hov') 
+0

這設置了ID父元素,而不是它的孩子,這是要求。 – LGSon

+0

我認爲div項目他正在尋找,否則添加.firstChild與解決問題。 –

+0

顯然不是......而問題中的代碼也是一樣的,孩子是目標 – LGSon

相關問題