如何使用 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 中是否有一个速记来实现这一点;

130672 次浏览

Not a real array, but objs are all associative arrays in javascript.

I chose not to use a real array with [] and [].push because technically, you can have multiple ID's on a page even though that is incorrect to do so. So just another option in case some html has duplicated ID's

$(function() {


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


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


});

//but i cannot really get the id and assign it to an array that is not with in the scope?(or can I)

Yes, you can!

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

This is the beauty of closures.

Note that while you were on the right track, sighohwell and cletus both point out more reliable and concise ways of accomplishing this, taking advantage of attribute filters (to limit matched elements to those with IDs) and jQuery's built-in map() function:

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)

The best way I can think of to answer this is to make a custom jquery plugin to do this:

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

Then do something like

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

The .get() method will return an array from a jQuery object. In addition you can use .map to project to something before calling get()

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

My suggestion?

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

you could also do this as:

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

or

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

or even just:

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

Lots of ways basically.

It's a late answer but now there is an easy way. Current version of jquery lets you search if attribute exists. For example

$('[id]')

will give you all the elements if they have id. If you want all spans with id starting with span you can use

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


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


}

You can get the ids of specifict tags and send it to a annother element. For exemple:

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

It will get all input ids and send it to 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")); });