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判断不对,这是为什么呢?
阅读 4.2k
4 个回答

每次调用一次$()方法,在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)
$(".Aboutme").next() === $(".News")   //false
{} === {}          //false
{a:1} === {a:1}    //false

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

$(".Aboutme").next()[0] === $(".News")[0])
$('.Aboutme').next().is('.News')
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题