如何使用jQuery获取所有ID?

Roy*_*han 62 javascript jquery

我试图收集一个扇区中的ID列表(数组)

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

$("#mydiv").find("span"); 
Run Code Online (Sandbox Code Playgroud)

给了我一个jQuery对象,但不是一个真正的数组;

我可以

var array = jQuery.makeArray($("#mydiv").find("span"));
Run Code Online (Sandbox Code Playgroud)

然后使用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)
Run Code Online (Sandbox Code Playgroud)

无论如何,我只是想知道jQuery中是否有简写这样做;

Sho*_*og9 138

//但是我无法真正获取id并将其分配给不在范围内的数组?(或者我可以)

是的你可以!

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

这就是封闭之美.

请注意,当你走在正确的轨道上时,sighohwellcletus都指出了更可靠和简洁的方法来实现这一点,利用属性过滤器(将匹配的元素限制为具有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)
Run Code Online (Sandbox Code Playgroud)


Joh*_*ter 33

.get()方法将从jQuery对象返回一个数组.此外,您可以在调用get()之前使用.map进行投影.

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


cle*_*tus 12

我的建议?

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

你也可以这样做:

var arr = $.map($("#mydiv span"), function(n, i) {
Run Code Online (Sandbox Code Playgroud)

要么

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

甚至只是:

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

基本上有很多方法.


gna*_*arf 7

我能想到的最好的解决方法是创建一个自定义jquery插件来执行此操作:

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

然后做类似的事情

var array = $("#mydiv").getIdArray();
Run Code Online (Sandbox Code Playgroud)


Cih*_*han 5

这是一个迟到的答案,但现在有一个简单的方法.当前版本的jquery允许您搜索属性是否存在.例如

$('[id]')
Run Code Online (Sandbox Code Playgroud)

如果他们有id,会给你所有的元素.如果您希望所有以id开头的跨度span都可以使用

$('span[id^="span"]')
Run Code Online (Sandbox Code Playgroud)