2016-06-29 20 views
2

我有一大堆class =“change”的跨度,每个都有唯一的id。我创建了使用这些跨度的数组:在JS/JQuery中查找由toArray创建的数组中的元素的索引

var changesArray = $('.change').toArray() 

我希望能够得到跨度的索引数组中,当我点击它。我试过了:

$('.change').click(function(){ 
    var thisChange = $(this).attr('id'); 
    var thisChangeIndex = $.inArray(thisChange,changesArray); 
}); 

但是我得到的每一个变化都是-1,我点击了。

我是这种类型的代码的新手。帮帮我?

+0

toArray返回DOM节点数组。 – jcubic

回答

4

toArray方法说

检索所有包含在jQuery的组中的元素,作为阵列。

你正在寻找一个特定的id在数组中 - 这将永远不会工作。

如果你想在项目的索引,你可以使用.index()

$('.change').click(function(){ 
 
    var thisChangeIndex = $('.change').index(this); 
 
    console.log(thisChangeIndex); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    <span class="change">change1</span> 
 
    <span class="change">change2</span> 
 
    <span class="change">change3</span> 
 
    <span class="change">change4</span> 
 
</div> 
 
<div> 
 
    <span class="change">change5</span> 
 
    <span class="change">change6</span> 
 
    <span class="change">change7</span> 
 
    <span class="change">change8</span> 
 
</div>

+0

所以我根本不需要数组。呵呵。那么,这会让事情变得更简单。 – JoshWeinstein

+0

它完美满足了我的需求。谢谢! – JoshWeinstein

-1

当你调用toArray,你得到所有的DOM节点,而不是jQuery的对象的数组。您可以在this代替$(this)搜索:

var changesArray = $('.change').click(function(){ 
    var thisChangeIndex = $.inArray(this,changesArray); 
}).toArray(); 
+0

downvote没有评论。多么幽默。由于代码本身起作用,如果选民愿意评论,这将会很好。这个版本没有额外搜索'.change'元素,这样就更接近原始问题。 (当然,没有toArray和缓冲jQuery对象也可以做到这一点,但除此之外) –

+0

我不确定这是我需要的,因为如果我正确读取它,它只会创建带有点击事件,对吧?我需要一些其他功能的数组,以及独立于此特定的单击事件。 – JoshWeinstein

+2

@Josh不,你错了 - ''toArray'在创建'click'事件后被简单地链接在一起 - 所以这个数组在事件处理程序 – Jamiec

0

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

var changesArrayIds = $('.change').toArray().map(function(x) { return x.id; }); 

,这一行应该很好地工作:

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

如果你坚持使用.toArray即可工作http://codepen.io/8odoros/pen/JKWxqz

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

之后仍然可以继续使用。谢谢! – JoshWeinstein

+0

你能解释一下$ .each函数中发生了什么吗? – JoshWeinstein

+1

[检查此](http://api.jquery.com/jquery.each/),它遍历数组的对象。获取两个参数(这里是'i'和'val'),它们保持当前索引和当前对象。 –