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

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

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

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

然而,为了代码的可读性,我想避免这类事情。有没有办法说“任何父母/祖父母/曾祖父母都有这门课”?

我使用的是 jQuery 1.7.2。

157010 次浏览
if ($elem.parents('.left').length) {


}

您可以使用 parents方法和指定的 .class选择器,并检查其中是否有匹配的:

if ($elem.parents('.left').length != 0) {
//someone has this class
}

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

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() < em > 方法在检查选择器时包含元素本身。

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

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

如果只是为了样式化的目的而希望匹配某个元素,只需使用 CSS 规则:

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