Javascript 在JS/JQuery中查找toArray创建的数组中元素的索引

Javascript 在JS/JQuery中查找toArray创建的数组中元素的索引,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一组class=“change”的跨度,每个跨度都有一个唯一的id。我使用以下方法创建了这些跨度的数组: var changesArray = $('.change').toArray() 我希望在单击数组时能够获得数组中跨度的索引。我试过: $('.change').click(function(){ var thisChange = $(this).attr('id'); var thisChangeIndex = $.inArray(thisChange,changesA

我有一组class=“change”的跨度,每个跨度都有一个唯一的id。我使用以下方法创建了这些跨度的数组:

var changesArray = $('.change').toArray()
我希望在单击数组时能够获得数组中跨度的索引。我试过:

$('.change').click(function(){
   var thisChange = $(this).attr('id');
   var thisChangeIndex = $.inArray(thisChange,changesArray);
});
但我所得到的是每点击一次就有-1


我对这类代码有点生疏。帮助?

toArray方法显示

以数组形式检索jQuery集中包含的所有元素

您正在数组中寻找一个特定的
id
,这永远不会起作用

如果需要项目的索引,可以使用
.index()

$('.change')。单击(函数(){
var thisChangeIndex=$('.change').index(this);
日志(thisChangeIndex);
});

变化1
变化2
变化3
变化4
变化5
变化6
变化7
变化8

当您调用
toArray
时,您会得到一个包含所有DOM节点的数组,而不是jquery对象。您可以搜索
而不是
$(此)


您应该只保留唯一ID的普通数组:

var changesArrayIds = $('.change').toArray().map(function(x) { return x.id; });
那么这条线应该可以正常工作了:

var thisChangeIndex = $.inArray(thisChange, changesArrayIds);

如果你坚持使用
.toArray
,那就行了


toArray返回DOM节点数组。不带注释的向下投票。真幽默。既然代码本身是有效的,如果选民愿意发表评论就好了?此版本不需要额外搜索
.change
元素,因此更接近原始问题。(当然也可以不用数组和缓冲jQuery对象,但这不是重点)我不确定这是否是我所需要的,因为如果我读对了,它只会创建带有单击事件的数组,对吗?我需要为一些其他函数设置数组,并且独立于此特定的单击事件。@Josh不,你错了-在创建
单击
事件后,
toArray
被简单地链接起来-因此该数组可以在以后使用,也可以在事件句柄中使用,所以我根本不需要数组。呵呵。好吧,这让事情变得简单了一点。你能解释一下$.each函数中发生了什么吗?它迭代数组的对象。获取保存当前索引和当前对象的两个参数(此处为
i
val
)。
var thisChangeIndex = $.inArray(thisChange, changesArrayIds);
var changesArray = $('.change').toArray();
$('.change').click(function(){
    var thisChange = $(this).attr('id');
    var thisChangeIndex = -1;
    $.each( changesArray, function( i, val ) {
      if( thisChange==val.id)  thisChangeIndex= i;
    }); 
    console.log(thisChangeIndex);
});