如何测试HTML元素的祖先是否有CSS类
How can I test if an ancestor of my HTML element has a CSS class?
给定这样的HTML代码-
<div id="parent" class="foo">
<div id="child">
</div>
</div>
如何编写测试来查看child
元素是否应用了类foo
?我试过了:
element
.children("#child") //successfully selects child
.hasClass("foo"); //false :(
CSS类不会像这样涓涓细流,但您仍然可以检查祖先是否有这样的类:
使用jQuery 检查是否有任何祖先有一个类
这可能是因为您的#child
没有foo
类。parent
有它,对吧?!
PS。大卫,你今天似乎受够了:)
CSS类不能以这种方式工作。它们只适用于应用它们的元素,不应该像那样明确地影响子元素。
CSS和jQuery都无法做到这一点。一个建议是使用closest
。
$(function(){
var element = $('#parent').children('#child');
if (element.closest('.foo').length > 0) {
//you will get true for .foo, #child, or #parent, or div, ...
console.log('Yay!');
} else {
console.log('Duh!');
}
});
打印"耶!"。
该方法将检查元素或祖先是否具有所需的类。你可以要求一个类或ID。如果你想检查隐藏的元素,正如你所说的,你可以在常规的is
调用中尝试:hidden
伪选择器,而不是hasClass
(Fiddle Here):
<div id="parent" class="foo" style='display: none'>
<div id="child">
</div>
</div>
$(function(){
var element = $('#parent').children('#child');
if (element.is(':hidden')) {
console.log('Yay!');
} else {
console.log('Duh!');
}
});
打印"耶!"。
另一个是,考虑到您当前的DOM(Fiddle Here):
$(function(){
var element = $('#parent').children('#child');
if (element.is('.foo *')) {
console.log('Yay!');
} else {
console.log('Duh!');
}
});
打印"耶!"。
然而,您使用的是ng-hide
,它通常意味着AngularJS。不知道你的意图是什么,但如果你不是在创建自定义指令,请避免使用jquery并重新思考你的问题。
使用.children()
时,选择器已移动到另一个DOM节点。要遍历回父对象,只需使用.end()
,即:
element
.children("#child")//successfully selects child
.end()//moves cursor back the parent element
.hasClass("foo");//true :)
使用jQuery
如何使用jQuery检查元素的任何祖先是否具有名为foo
:的类
$element.parents('.foo').length > 0
Demo
var $element = $('#child');
alert(
$element.parents('.foo').length > 0
);
alert(
$element.parents('.bar').length > 0
);
<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.3.min.js"></script>
<div id="parent" class="foo">
<div id="child">
</div>
</div>
(另请参见此Fiddle)
没有jQuery
如何在没有jQuery的情况下检查元素的任何祖先是否具有名为foo
:的类
element.matches('.foo ' + element.tagName)
Demo
var element = document.getElementById('child');
alert(
element.matches('.foo ' + element.tagName)
);
alert(
element.matches('.bar ' + element.tagName)
);
<div id="parent" class="foo">
<div id="child">
</div>
</div>
(另请参见此Fiddle)
相关文章:
- 访问布局信息是否也会导致浏览器重排
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 如何检测是否有溢出
- jQuery中是否内置了任何字符串格式化函数
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 测试索引值是否等于某个数字的倍数
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- YUI3 IO实用程序是否可以根据给定的内容类型标头值自动序列化数据
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 如何测试HTML元素的祖先是否有CSS类
- Vanilla javascript检查元素或祖先是否有类
- 检查元素的祖先是否已固定
- 如何确定子元素是否在包含祖先之外
- 在JavaScript中是否有一种优雅的方法来防止祖先的点击
- 检查是否有任何祖先有使用jQuery的类
- 检查事件目标是否有特定的祖先