jQuery parents()与对象引用选择器

时间:2014-04-07 09:08:24

标签: javascript jquery scroll parents

我试图检测目标元素是子元素还是同一元素,我作为对象引用。

我使用以下逻辑:

$("html").on("mousewheel.scroll DOMMouseScroll.scroll",function(e){
   e.preventDefault();

   var $scrollableElement = $(".foo").eq(0);
   var $target = $(e.target);

   if ($target == $scrollableElement
       || $target.parents($scrollableElement).length) {                
        alert("scroll");                    
   }

});  

然而"滚动"即使在不是.foo的元素或.foo的子元素上滚动时也会收到提醒。

在我的JsFiddle示例中,滚动.bar元素,"滚动"仍然警告:

http://jsfiddle.net/Lf3d2/

这是为什么?是否可以使用jQuery对象引用作为.parents()的选择器?

1 个答案:

答案 0 :(得分:6)

尝试使用.closest()代替.parents()

$(function () {

    var $scrollableElement = $(".foo").eq(0);
    $("html").on("mousewheel.scroll DOMMouseScroll.scroll", function (e) {
        e.preventDefault();

        var $target = $(e.target);

        if ($target.closest($scrollableElement).length) {
            console.log("scroll");
        }

    });

});

演示:Fiddle

如果您查看.parents()的语法,则不会将jQuery对象作为参数。唯一允许的语法是.parents( [selector ] )


As @ A.Wolff问为什么不将事件绑定到.foo

演示:Fiddle