如何使用 jQuery 获取所有 ID?

IT技术 javascript jquery
2021-01-17 13:38:20

我正在尝试收集一个扇区中的 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 中是否有一个速记来做到这一点;

6个回答

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

是的你可以!

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

这就是闭包的美妙之处

请注意,虽然您在正确的轨道上,但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)
请记住 $.unique 不适用于字符串或数字api.jquery.com/jQuery.unique
2021-03-14 13:38:20
@Deviant:真的(虽然如果你这样做,你已经使 ID 有点无用......)我的例子不适合生产代码的另一个原因是它没有过滤元素 - 如果 Roy 有任何没有 ID 的跨度,他最终会在数组中得到空元素。
2021-03-16 13:38:20
我使用这个函数来只获取唯一的变量(螺丝重复的 id,它们在第二次出现时无论如何都不会工作)$.unique($('[id]').map(function() { return this.id; }).get());通过将它包装在 $.unique 中,它会得到很好的过滤,保持你的代码干净:-)
2021-04-11 13:38:20
只是补充答案,如果您想使用某个字符串从页面中搜索所有 ID: $('*').each(function(){ if (/^stringhere/g.test(this.id)) { console.日志(this.id) } });
2021-04-11 13:38:20
是的,我没有使用真正的数组,因为从技术上讲,即使这样做完全错误,也可以在 html 中放置重复的 ID
2021-04-13 13:38:20

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

var idarray = $("#myDiv")
             .find("span") //Find the spans
             .map(function() { return this.id; }) //Project Ids
             .get(); //ToArray
我欠你一个咖啡伴侣!
2021-03-25 13:38:20

我的建议?

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 允许您搜索属性是否存在。例如

$('[id]')

如果他们有 id,会给你所有的元素。如果你想要所有以 id 开头的跨度,span你可以使用

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