jquery:if(target)是('.wrapper')的子项然后(做某事)

and*_*ick 43 javascript jquery

var target = $(this).attr("href");

if {target is child of ('.wrapper')} then (do something)
Run Code Online (Sandbox Code Playgroud)

简单的语法?有人可以在这里告诉我正确的语法吗?

Jac*_*kin 74

if($(target).parents('.wrapper').length > 0) {
   //do something...
}
Run Code Online (Sandbox Code Playgroud)

  • 但是,如果它嵌套了两个级别,这将无效. (2认同)
  • @rahul 0是一个假值,所以你真的不需要. (2认同)

jAn*_*ndy 35

.has() 可能是mose方便的语法:

if( $('.wrapper').has($(target)) ) {
     // do something
}
Run Code Online (Sandbox Code Playgroud)

甚至更"强大"(在性能方面)是$.contains().所以一个理想的算法应该是这样的:

var $wrapper =  $('.wrapper'),
    $target  =  $(this).attr('href');

if( $.contains($wrapper[0], $target[0]) ) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

参考:.has(),$ .contains()

  • 对于`$ .contains()`的+1,由jQuery API明确描述为"检查DOM元素是否是另一个DOM元素的后代". (5认同)
  • 我不建议使用所描述的`.has()`,因为它不会像你期望的那样返回一个布尔值.相反,它过滤原始的DOM元素集并返回一个新的jQuery对象.("描述:将匹配元素的集合减少到具有与选择器或DOM元素匹配的后代的元素.")因此,尽管在这种情况下_does_产生了正确的结果,但我认为返回值不直观并且可能让您头疼如果你假设它返回一个布尔值. (3认同)

mat*_*dav 5

这是一种更简洁的方法:将其绑定为 jQuery 插件。您可能会发现它更易于理解和使用。

   $.fn.isChildOf = function(element)
{
    return $(element).has(this).length > 0;
}
Run Code Online (Sandbox Code Playgroud)

用法:

    if ( $('.target').isChildOf('.wrapper') ) {
      //do all the things.
    }
Run Code Online (Sandbox Code Playgroud)