2014-06-15 18 views
1

看看這個小提琴:http://jsfiddle.net/8HHvf/
HTMLjQuery的數組中沒有找到對象

<ul id='myUL'> 
    <li id="a"></li> 
    <li id="b"></li> 
    <li id="c"></li> 
    <li id="d"></li> 
    <li id="e"></li> 
</ul> 

JS

var arr = []; 
$a=$('#a'); 
arr.push($a); 
$a=$('#b'); 
arr.push($a); 
$a=$('#d'); 
arr.push($a); 
$a=$('#e'); 
arr.push($a); 

console.log(arr); 
if(jQuery.inArray($('li#b'),arr)!=-1){ 
    console.log('aurica!!!'); 
} 

我填充數組與jQuery對象,但inArray方法不找到一個對象。
此代碼假設寫「aurica !!!」但事實並非如此。

你有什麼想法,爲什麼,而且更無力我怎麼能找到一個數組內的jQuery對象?

+0

技術上'$(「#李B」)'是你把陣列中的任何變量保存一個完全不同的對象。 –

回答

2

通過重新賦值$ a,您只需將$('#e')寫入陣列四次。你可以看到這個如果你:

console.log(JSON.stringify(arr)) 

在一個現代的瀏覽器。

2

如果您想檢查是否相等,或者想要比較爲jQuery對象總是是唯一的,那麼您需要推HTMLElement

$(document) != $(document); 

您可以簡化代碼:

var arr = $('#a,#b,#c,#d').get(); 
console.log(arr); 
if (jQuery.inArray($('li#b').get(), arr) != -1) { 
    console.log('aurica!!!'); 
} 

.get()轉換jQuery對象HTMLElement這能夠在比較。

0

我認爲問題是如果條件中缺少.val()屬性。這種嘗試,我希望它可以幫助你

var arr = []; 
var a=$('#a').val(); 
arr.push(a); 
a=$('#b').val(); 
arr.push(a); 
a=$('#d').val(); 
arr.push(a); 
a=$('#e').val(); 
arr.push(a); 

console.log(arr); 
if(jQuery.inArray($('li#b').val(),arr)!=-1){ 
    console.log('aurica!!!'); 
} 
arr = jQuery.grep(arr, function(value) { 
    return !$('#b').is(value);; 
}); 
console.log(arr); 
0

通過按選擇的返回值,要創建一個新的數組並存入您的數組變量。爲了能夠在較晚的時間點進行比較,實際上應該存儲(唯一)可比較的任何事物的元素本身。

下面更改您的JS應該做的伎倆,

$(function() { 
var arr = []; 
$a=$('#a'); 
arr.push($a[0]); 
$a=$('#b'); 
arr.push($a[0]); 
$a=$('#d'); 
arr.push($a[0]); 
$a=$('#e'); 
arr.push($a[0]); 

console.log(arr); 
if(jQuery.inArray($('li#a')[0],arr)!=-1){ 
    console.log('aurica!!!'); 
} 
arr = jQuery.grep(arr, function(value) { 
    return !$('#b').is(value);; 
}); 
console.log(arr); 

//alert(y); 
});