2009-05-05 57 views
53

我想聚集在一個部門如何使用jQuery獲取所有ID?

<div id="mydiv"> 
<span id='span1'> 
<span id='span2'> 
</div> 

$("#mydiv").find("span"); 

ID列表(陣列)給了我一個jQuery對象,而不是真正的數組;

我可以做

var array = jQuery.makeArray($("#mydiv").find("span")); 

,然後用一個for循環來把ID屬性到另一個數組

或者我可以做

$("#mydiv").find("span").each(function(){}); //but i cannot really get the id and assign it to an array that is not with in the scope?(or can I) 

無論如何,我只是想看看在jQuery中有這樣的簡寫;

回答

121

//但我真的不能得到ID,並將其分配到一個數組,它是不是在範圍?(或者我可以)

是的,你可以!

var IDs = []; 
$("#mydiv").find("span").each(function(){ IDs.push(this.id); }); 

這是closures的美麗。

注意,當你在正確的軌道上,sighohwellcletus都指出實現這一點,採取的attribute filters優勢(限制匹配的元素到那些IDS)和jQuery的的更可靠和更簡潔的方式內置map()功能:

var IDs = $("#mydiv span[id]")   // find spans with ID attribute 
    .map(function() { return this.id; }) // convert to set of IDs 
    .get(); // convert to instance of Array (optional) 
+0

是的,我沒有使用真正的數組,因爲在技術上你*能*把重複的ID在HTML即使它完全錯誤做 – 2009-05-05 23:07:33

+0

@Deviant:如果你這麼做了,那麼你已經讓ID沒有用處了......)另一個我的例子不適用於生產代碼的原因就是它沒有過濾元素 - 如果Roy有沒有ID的跨度,最後會得到數組中的空元素。 – Shog9 2009-05-05 23:16:15

3

不是real數組,但objs都是javascript中的所有關聯數組。

我選擇不使用帶有[]和[] .push的真實數組,因爲從技術上講,您可以在頁面上擁有多個ID,即使這樣做不正確。所以以防萬一某些HTML複製了另一種選擇ID的

$(function() { 

     var oArr = {}; 
     $("*[id]").each(function() { 
      var id = $(this).attr('id'); 
      if (!oArr[id]) oArr[id] = true; 
     }); 

     for (var prop in oArr) 
      alert(prop); 

    }); 
7

我能想到的來回答這個最好的辦法是讓一個自定義的jQuery插件做到這一點:

jQuery.fn.getIdArray = function() { 
    var ret = []; 
    $('[id]', this).each(function() { 
    ret.push(this.id); 
    }); 
    return ret; 
}; 

然後像做

var array = $("#mydiv").getIdArray(); 
30

.get()方法將從jQuery對象中返回一個數組。另外,你可以在調用get()之前使用.map來投影某個東西get()

var idarray = $("#myDiv") 
      .find("span") //Find the spans 
      .map(function() { return this.id; }) //Project Ids 
      .get(); //ToArray 
11

我的建議?

var arr = $.map($("#mydiv [id]"), function(n, i) { 
    return n.id; 
}); 

你也可以這樣做,因爲:

var arr = $.map($("#mydiv span"), function(n, i) { 

var arr = $.map($("#mydiv span[id]"), function(n, i) { 

甚至只是:

var arr = $("#mydiv [id]").map(function() { 
    return this.id; 
}); 

很多方法基本上是這樣。

5

這是一個遲到的答案,但現在有一個簡單的方法。 jQuery的當前版本讓你搜索屬性是否存在。例如

$('[id]') 

會給你所有的元素,如果他們有id。如果你想用的ID開始span所有的跨度可以使用

$('span[id^="span"]') 
-1
for(i=1;i<13;i++)  
{ 

    alert($("#tdt"+i).val()); 

} 
1

你可以得到specifict標籤的ID,並將其發送到annother元素。對於爲例:

$("input").map(function() { 
    $("textarea").append(this.id+"\n"); 
}); 

它會得到所有輸入ID和它發送到文本區域。

1

HTML

<div id="mydiv"> 
<span id='span1'> 
<span id='span2'> 
</div> 

JQuery的

var IDs = []; 
$("#mydiv").find("span").each(function(){ IDs.push($(this).attr("id")); });