【发布时间】:2010-10-18 06:37:01
【问题描述】:
var target = $(this).attr("href");
if {target is child of ('.wrapper')} then (do something)
语法简单?有人可以在这里告诉我正确的语法吗?
【问题讨论】:
标签: javascript jquery
var target = $(this).attr("href");
if {target is child of ('.wrapper')} then (do something)
语法简单?有人可以在这里告诉我正确的语法吗?
【问题讨论】:
标签: javascript jquery
if($(target).parents('.wrapper').length > 0) {
//do something...
}
【讨论】:
href 指向 OP 要检查的元素的实际 id,而不是 this。
.has() 可能是最方便的语法:
if( $('.wrapper').has($(target)) ) {
// do something
}
更“强大”(就性能而言)是$.contains()。所以一个理想的算法应该是这样的:
var $wrapper = $('.wrapper'),
$target = $(this).attr('href');
if( $.contains($wrapper[0], $target[0]) ) {
// do something
}
【讨论】:
$.contains() 被 jQuery API 明确描述为“检查一个 DOM 元素是否是另一个 DOM 元素的后代。”
.has(),因为它不会像您期望的那样返回布尔值。相反,它过滤原始的 DOM 元素集并返回一个新的 jQuery 对象。 (“描述:将匹配元素的集合减少为具有与选择器或 DOM 元素匹配的后代的元素。”)因此,尽管在这种情况下它确实产生了正确的结果,但我认为返回值不直观,如果您假设它返回布尔值,可能会让您头疼。
这是一种更简洁的方式:将其绑定为 jQuery 插件。您可能会发现它更易于理解和使用。
$.fn.isChildOf = function(element)
{
return $(element).has(this).length > 0;
}
用法:
if ( $('.target').isChildOf('.wrapper') ) {
//do all the things.
}
【讨论】:
如果孩子的深度超过一级,则对 Jacob 的代码进行少量更改。
if($(target).parents('.wrapper').length) {
//do something...
}
【讨论】:
【讨论】:
我知道这是旧帖子,但它可能对某人有用。 在我看来,在许多情况下使用 .closest() 会有更好的性能:
if ($(target).closest('.wrapper').length){
// your code here
}
【讨论】:
<div class="parent">
<div class="child">
</div>
</div>
$(".child").is(".parent .child")
【讨论】:
您可以使用 jQuery 的 .find() 方法,如下所示:
if ( $( '.wrapper' ).find( $( e.target ) ).length > 0 ) {
// target is a child of $( '.wrapper' )
}
$( document ).on('click', function ( e ) {
if ( $( '.wrapper' ).find( $( e.target ) ).length > 0 ) {
// do staff here, target's inside $( '.wrapper' )
alert( 'target is a child of .wrapper' );
} else {
alert( 'target is not a child of .wrapper' );
}
} );
.wrapper {
width: 200px;
height: 200px;
background: black;
display: flex;
}
.wrapper:before {
content: '.wrapper';
color: #FFF;
position: absolute;
}
.child {
width: 80px;
height: 80px;
background: red;
margin: auto;
color: #fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
<div class="child">.child</div>
</div>
【讨论】:
你不能绑定另一个事件吗?
$('.wrapper *').click(function() {
// will execute on childrens of .wrapper
});
【讨论】:
你可以使用jQuery的is函数,
var target = $(this).attr("href");
if ($('a[href="'+target+'"]').is(('.wrapper > *') {
//do soemthing
}
'.wrapper > *' 是 .wrapper 的显式第一级子级的 css 选择。如果您需要任何嵌套的锚元素,请改用'.wrapper *'
【讨论】: