2011-06-13 112 views
1

說,我有5個段落在頁面中。jQuery inArray()定位HTML元素

如果我執行:

p_array=$('p'); 
second_p=$('p:eq(1)'); 
$.inArray(second_p,p_array); 

我得-1。 任何解釋?

+0

'second_p'是一個jQuery對象,'p_array'是一個包含DOM節點的類數組對象...因此,'p_array'顯然不包含'second_p'。 – 2011-06-13 00:36:42

+0

爲什麼不'second_p = p_array.eq(1);'?你正在做不必要的兩次查找。 – 2011-06-13 00:38:25

回答

4

p_arraysecond_p都不是數組。

他們是jQuery對象。

更具體地說,p_array是一個包含一組5個DOM節點的jQuery對象。 second_p是一個包含一組1個DOM節點的jQuery對象。

$.inArray可以在這些jQuery節點集上運行,但是您無法將集合與集合進行比較。

如果提取使用數組下標操作jQueryObj[i])一個DOM節點,那麼你就不再比較了一組針對一組:

var p_array=$('p'); 
var second_p=$('p:eq(1)'); 
alert($.inArray(second_p[0], p_array)); // result: 1 

見現場演示here

+0

我明白了,真的謝謝。順便說一下,好的網站! – xiaohan2012 2011-06-14 12:39:01

+0

@ xiaohan2012:是的,我們喜歡它:) – 2011-06-14 12:39:29

1

p_arraysecond_p都是數組式的jQuery對象。要提取爲<p>實際的DOM節點並對其進行測試,如:

$.inArray(second_p[0], p_array); 

這叫我回報1,符合市場預期。