2011-06-13 193 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,符合市场预期。