首页 > if($(".x").next()==$(".y")){} 这样的语句为什么执行不了?

if($(".x").next()==$(".y")){} 这样的语句为什么执行不了?

<div class="wrapper">
         <div class="Essay"><a href="#" ><img src="milan3.jpg"/></a></div>
         <div class="Aboutme"><a href="#" ><img src="milan3.jpg"/></a></div>
         <div class="News"><a href="#" ><img src="milan3.jpg"/></a></div>
    </div>
    
    
    

$(".Aboutme").mouseover(function(){
        if($(".Aboutme").next()==$(".News")){
            alert("move");
        }
        $(this).next().animate({left:'250px'});
    });
    
    现在的问题是下面的animate动作是可以完成的,但是上面的alert却不能完成,也就是if判断不对,这是为什么呢?

$(".Aboutme").next() === $(".News")   //false
{} === {}          //false
{a:1} === {a:1}    //false

与后两条比较一样,你所比较的两个对象是不相等的。
你要确定比较的是两个对象,还是比较对象的属性。根据你的要求,应该是这样

$(".Aboutme").next()[0] === $(".News")[0])

$('.Aboutme').next().is('.News')

每次调用一次$()方法,在jq内部实际上就调用了一次new方法
既然都调用new方法了,说明每使用一次$(),在堆内存中就单独分配了一块空间来存放该对象。
因此虽然他们可以操作同一个dom节点,但是他们实际上是不相等的。

$('.News') == $('.News') // false

其实你写$(".News")==$(".News")也返回false。

显然next函数并不是定义在element上面的,所以你$(".News")返回的也不是那个<div>,而是jquery给你包好的一个对象。为了实现方便,他可能每次都给你产生一个新的wrapper,然后这个wrapper里面有next函数给你用。因此你需要先获取对应的<div>,然后再比较。

正确写法:

$(".Aboutme").next().get(0)==$(".News").get(0)
【热门文章】
【热门文章】