如何比较jquery中的两个元素

zjm*_*126 128 javascript jquery dom

var a=$('#start > div:last-child');
var b=$('#start > div.live')[0];
alert(a==b)
alert(a==$(b))
Run Code Online (Sandbox Code Playgroud)

这总是错误的.你如何比较jQuery中的两个元素?

谢谢

e-m*_*tiv 328

为了记录,jQuery有一个is()功能:

a.is(b)
Run Code Online (Sandbox Code Playgroud)

请注意,a它已经是一个jQuery实例.

  • 这应该是公认的答案. (9认同)
  • 它的效果很好! (2认同)

Dar*_*rov 144

您可以比较DOM元素.请记住,jQuery选择器返回的数组在引用相等的意义上永远不会相等.

假设:

<div id="a" class="a"></div>
Run Code Online (Sandbox Code Playgroud)

这个:

$('div.a')[0] == $('div#a')[0]
Run Code Online (Sandbox Code Playgroud)

返回true.

  • 请参阅@ RU-Bn的评论.以下是诀窍:a.is(b) (7认同)
  • 是的,我已经在IE6,FF 3.6和Chrome 4上测试了这个代码.它在所有这些浏览器上返回"true". (3认同)
  • 这种比较不起作用.请参阅RU-Bn的答案 (2认同)

Anu*_*rag 13

每次调用jQuery()函数时,都会创建并返回一个新对象.因此,即使对相同选择器进行相等检查也会失败.

<div id="a">test</div>

$('#a') == $('#a') // false
Run Code Online (Sandbox Code Playgroud)

生成的jQuery对象包含一个匹配元素的数组,这些元素基本上是本机DOM对象HTMLDivElement,总是引用同一个对象,所以你应该使用数组索引检查它们是否相同,如Darin建议的那样.

$('#a')[0] == $('#a')[0] // true
Run Code Online (Sandbox Code Playgroud)


Jon*_*ndi 6

a.is(b)
Run Code Online (Sandbox Code Playgroud)

and to check if they are not equal use

!a.is(b)
Run Code Online (Sandbox Code Playgroud)

as for

$b = $('#a')
....
$('#a')[0] == $b[0] // not always true
Run Code Online (Sandbox Code Playgroud)

maybe class added to the element or removed from it after the first assignment