2009-05-05 55 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")); });