2012-07-03 103 views
-2

在下面的代碼(或任何地方)的上下文中,有可能getelementbyid函數工作複數?或者我需要一個不同的功能,或者可能需要Jquery?使getelementbyid複數

<script type="text/javascript"> 
    window.onload = function() 
    { 
    var test = document.getElementById('test'); 
    if (test) 
     { 
     test.className = 'unactive'; 
     test.firstChild.onclick = function() 
      { 
      if(this.parentNode.className == 'unactive') { 
      this.parentNode.className = 'active'; 
      } 
      else 
       { 
       this.parentNode.className = 'unactive'; 
       } 
      } 
     } 
    }; 
</script> 
+9

你的「ID」的值應該是一種或多種元素無論如何都是獨一無二的,所以沒有任何意義。您可以使用「類」值對元素進行分類,以便可以按組查找它們。 – Pointy

+1

*多元*是什麼意思?每個ID應該只有一個元素。你想達到什麼目的? –

+1

我想你是要求'類' – coolguy

回答

0

我假設您想要使用ID列表對多個元素進行操作。 (如果我錯了,並且實際上你想選擇多個具有相同ID的元素,那麼你做了一件壞事,因爲ID應該是唯一的。在這種情況下,應該使用類。)

在jQuery ,您可以用逗號分隔的ID選擇的列表來完成這個(如$("#foo, #bar, #baz"))和實現的功能,如:

$("#foo, #bar, #baz").addClass("unactive") 
.children(":first-child").click(function() { 
    var $this = $(this); 
    var $parent = $this.parent(); 
    $parent.toggleClass("active unactive"); 
}); 

沒有的jQuery,這個小功能需要ID的列表和結果的數組節點:

document.getElementsByIdList() { 
    var results = []; 
    for(var i=0; i<arguments.length; ++i) { 
     results.push(document.getElementById(arguments[i])); 
    } 
    return results; 
} 

與你當前的代碼使用它:

var myNodeArray = document.getElementsByIdList("foo", "bar", "baz"); 
for(var i=0; i<myNodeArray.length; ++i) { 
    var test = myNodeArray[i]; 
    if(test) { 
     // your code goes in here... 
    } 
} 
+0

該功能到底如何與我的工作?它看起來不錯,但我有點新鮮。你能分解它嗎? @apsillers –

+0

@Shimmy我爲您如何使用我的答案和當前的代碼添加了更多的上下文。 – apsillers

0

您可以使用此;

document.getAllById = function(id){ 
    if(document.all) 
     return document.all[id]; 
    var elements = [], 
    all = document.getElementsByTagName('*'); 
    for(var i=0;i<all.length;i++) 
     if(all[i].getAttribute('id')===id) 
      elements.push(all); 
    return elements; 
} 

無論如何,@Pointy所說,id屬性應該是唯一的,而class用於定義具有一些共同的性質