使用jQuery检查是否有任何祖先有类

在jQuery中,有没有办法检查是否有任何父级,祖父母,曾祖父母有类。

我有一个标记结构,让我在代码中做这样的事情:

$(elem).parent().parent().parent().parent().hasClass('left')

但是,为了代码的可读性,我想避免这种事情。有没有办法说“任何父母/祖父母/曾祖父母都有这个班级”?

我正在使用jQuery 1.7.2。


答案 1
if ($elem.parents('.left').length) {

}

答案 2

有许多方法可以筛选元素祖先。

if ($elem.closest('.parentClass').length /* > 0*/) {/*...*/}
if ($elem.parents('.parentClass').length /* > 0*/) {/*...*/}
if ($elem.parents().hasClass('parentClass')) {/*...*/}
if ($('.parentClass').has($elem).length /* > 0*/) {/*...*/}
if ($elem.is('.parentClass *')) {/*...*/} 

请注意方法在检查选择器时包括元素本身。closest()

或者,如果您有一个与 匹配的唯一选择器,例如 ,则可以使用:$elem#myElem

if ($('.parentClass:has(#myElem)').length /* > 0*/) {/*...*/}
if(document.querySelector('.parentClass #myElem')) {/*...*/}

如果要仅出于样式设置目的而匹配依赖于其任何祖先类的元素,只需使用 CSS 规则

.parentClass #myElem { /* CSS property set */ }