如何使用jQuery获取所有ID?

我正在试图收集一个部门的ID列表(数组)

<div id="mydiv"> <span id='span1'> <span id='span2'> </div> $("#mydiv").find("span"); 

给我一个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中是否有这样的简写;

//但是我不能真正得到id并将它分配给一个不在范围内的数组?(或者我可以)

是的你可以!

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

这是closures的美丽。

请注意,当你在正确的轨道上时, sighohwell和cletus都指出了更可靠和简洁的方法来实现这一点,利用属性filter (限制匹配元素与ID)和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) 

.get()方法将从jQuery对象中返回一个数组。 另外,您可以在调用get()之前使用.map来投影到某个东西

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

我的build议?

 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; }); 

基本上有很多方法。

我能想到回答这个问题的最好方法是制作一个自定义的jquery插件来完成这个工作:

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

然后做一些像

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

这是一个迟到的答案,但现在有一个简单的方法。 jquery的当前版本让你search是否存在属性。 例如

 $('[id]') 

会给你所有的元素,如果他们有身份证。 如果你想要所有跨度与span开始你可以使用

 $('span[id^="span"]') 

不是一个真正的数组,但objs是在JavaScript中的所有关联数组。

我select不使用[]和[] .push的真实数组,因为从技术上讲,即使这样做不正确,也可以在页面上拥有多个ID。 所以只是另一种select,以防一些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); }); 

您可以获取特定标签的ID并将其发送给其他元素。 举个例子:

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

它将获得所有inputID并将其发送到textarea。

HTML

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

JQuery的

 var IDs = []; $("#mydiv").find("span").each(function(){ IDs.push($(this).attr("id")); }); 
 for(i=1;i<13;i++) { alert($("#tdt"+i).val()); }