同一元素的jQuery对象不相等?

时间:2013-05-03 12:17:31

标签: jquery

这一定是我忽略的东西,但是请看下面的页面和JavaScript并告诉我为什么,对于所有圣洁的东西,jQuery不会返回true?

HTML:http://alcatel.scottbuckingham.com/reporting/test.html

<p class="test">hello1</p>

JS:http://alcatel.scottbuckingham.com/reporting/_scripts/collapse.js

;(function($, window, document, undefined) {

        var t = $('.test');
        var s = $('.test');

        console.log(t);
        console.log(s);

        if (t === s) {
            console.log('yes');
        }

})(jQuery, window, document);

我花了好几个小时试图解决这个问题并将其减少到几乎1 === 1这个不起作用的声明。

非常感谢任何帮助!

5 个答案:

答案 0 :(得分:8)

试试这个 - 工作演示 - &gt; http://jsfiddle.net/mohammadAdil/tHjgN/

 if(t.is(s)) {
    console.log('yes');
 }

http://api.jquery.com/is/

===

if (t.get(0) === s.get(0)) { //<--Compare DOM elements instead of jquery object's
    console.log('again yes');
}

演示 - &gt; http://jsfiddle.net/mohammadAdil/tHjgN/1/

答案 1 :(得分:2)

您可以使用jQuery is方法。

  

描述:根据a检查当前匹配的元素集   选择器,元素或jQuery对象,如果至少有一个,则返回true   这些元素与给定的参数匹配。

if (t.is(s)) {
    console.log('yes');
}

示例小提琴:http://jsfiddle.net/IrvinDominin/q86Sh/

答案 2 :(得分:1)

您可以这样做,比较HTML节点。 如果你想比较HTML对象,这是正确的方法。

if (t[0] === s[0]) {
    console.log('yes');
}

答案 3 :(得分:1)

您的脚本位于<head><p class="test">hello1</p>中的元素<body>

首先,您应该使用$(document).ready()来确保加载内容。然后使用.is()检查它们是否相等。

$(document).ready(function() {

        var t = $('.test');
        var s = $('.test');

        console.log(t);
        console.log(s);

        if (t.is(s)) {
            console.log('yes');
        }
});

比较示例withwithout .ready()函数。

答案 4 :(得分:1)

这可以帮到你:

var test = document.getElementById('test') //returns a HTML DOM Object
var test = $('#test') //returns a jQuery Object
var test = $('#test')[0] //returns a HTML DOM Object

所以(就像众人告诉你的那样)使用这个:

if (t[0] === s[0]) {
    console.log('yes');
}

使用

也是一种好习惯
$(document).ready(function(){


});

围绕你的代码。