2017-04-18 100 views
0

Java腳本僅獲取第一個ID。第二個ID忽略代碼。無論如何要使用相同的Java腳本來創建兩個ID?使用Java腳本獲取所有相同的ID

添加項目 列表項
<div id="add_item" class="tabcontent"> 
<div id="subcatchooser"></div> 

<div id="list_item" class="tabcontent"> 

<div id="subcatchooser"></div> 

Java腳本這裏

function showsubcat(str) { 
    if (str.length == 0) { 
     document.getElementById("subcatchooser").innerHTML = ""; 
     return; 
    } else { 
     var xmlhttp = new XMLHttpRequest(); 
     xmlhttp.onreadystatechange = function() { 
      if (this.readyState == 4 && this.status == 200) { 
       document.getElementById("subcatchooser").innerHTML = this.responseText; 
      } 
     }; 
     xmlhttp.open("GET", "ajax.php?action=showsubcat&parent_id=" + str, true); 
     xmlhttp.send(); 
    } 
} 

</script> 
+3

這就是它應該如何工作,ID的都應該是獨一無二的。如果不是,那麼它嚴格違反HTML標記規範。試圖獲得一個id將返回在DOM中找到的第一個。改用類。 –

+1

如果你不能(無論什麼原因)擁有唯一的ID - 使用'document.querySelectorAll('#subcatchooser')' - 唯一的ID是有效HTML的基石 - 所以,不要這樣做 –

+0

使用類而不是id的。然後使用'document.getElementsByClassName'。 **編輯:** Julia Nething已經引起了我的注意,所以忘記我曾經說過的任何話。 –

回答

0

也就是說類和ID之間的主要區別。類被設計爲多次使用,而ID被設計爲唯一的。所以,你可以改變的div看起來像這樣:

<div class="subcatchooser"></div> 

,然後更改的JavaScript看起來像這樣:

var elements = document.getElementsByClassName("subcatchooser"); 
for (var i = 0; i < elements.length; i++) { 
    elements[i].innerHTML = ""; 
} 
+1

[* getElementsByClassName *](https://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#dom-document-getelementsbyclassname)返回一個活的[* HTMLCollection *](https:// dom.spec.whatwg.org/#htmlcollection),它沒有* innerHTML *屬性。 :-) – RobG

+0

謝謝@RobG!我的道歉,現在修復 –