2016-06-29 52 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'),它們保持當前索引和當前對象。 –