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

我使用以下逻辑:

$("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的子元素的元素,也会发出“scroll”警报。

在我的JsFiddle示例中,滚动到.bar元素,并且仍会警告“scroll”:

http://jsfiddle.net/Lf3d2/

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

最佳答案

尝试使用.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 ] )
正如@ A.Wolff询问为什么不将事件绑定(bind)到.foo
演示:Fiddle

关于javascript - 带有对象引用选择器的jQuery Parents(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22908048/

10-09 16:09