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

时间:2013-06-13 10:31:33

标签: javascript jquery html jquery-selectors jquery-1.7

jQuery中是否有任何方法可以检查任何父级,祖父级,曾祖父级是否有类。

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

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

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

我正在使用jQuery 1.7.2。

3 个答案:

答案 0 :(得分:258)

if ($elem.parents('.left').length) {

}

答案 1 :(得分:69)

有许多方法可以过滤元素祖先。

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 */ }

答案 2 :(得分:6)

您可以对指定的parents选择器使用.class方法,并检查它们是否与之匹配:

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