javascript – 不包含blockquote的节点的查询选择器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 不包含blockquote的节点的查询选择器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1297字,纯文字阅读大概需要2分钟。
内容图文
![javascript – 不包含blockquote的节点的查询选择器](/upload/InfoBanner/zyjiaocheng/793/61fde95ddd0c4d63b47d06fbb66a0c5d.jpg)
我正在试图找出以下标记的选择器.我想要所有节点,除了包含blockquote的节点. < blockquote>永远是< div>的直接孩子这将是< body>的直接孩子.标签.
示例HTML:
<ul>
<!-- Lots of HTML -->
</ul>
<div>
<p>
<!-- Lots of other HTML -->
</p>
</div>
<div>
<blockquote>Some text I don't care about</blockquote>
</div>
预期结果:
<ul><!-- Lots of HTML --></ul>
<div><p><!-- Lots of other HTML --></p></div>
尝试选择器:
document.querySelectorAll("body > :not(div > blockquote)")
我尝试了上面的内容,但我不能将一个直接的子选择器放在:not()选择器中. Here is a fiddle失败的尝试.
我目前不是,也不能使用jQuery.
解决方法:
你原生不能这样做.在任何当前的选择器规范中,无法通过子节点过滤元素. (但是,这可能会出现在未来的选择器规范中.)
因此,您需要自己进行过滤.这并不是特别困难.一种方法是选择所有相关元素,然后过滤掉你不想要的元素:
Array.prototype.slice.call(document.querySelectorAll("body > *"))
.filter(function(el) {
return !el.querySelector(':scope > blockquote');
})
这会将选择转换为数组,然后使用Array#filter方法去掉所有包含blockquote元素的方法.
显然,这比原生选择器的性能差得多,但它是在当前JS中做你想要的唯一方法.
正如BoltClock正确指出的那样:范围还不是官方标准.由于Chrome确实支持它,我被一种虚假的安全感所迷惑:其他浏览器还没有.如果要在任何级别排除包含blockquote元素的任何顶级元素,最好的方法是:
return !el.querySelector('blockquote');
内容总结
以上是互联网集市为您收集整理的javascript – 不包含blockquote的节点的查询选择器全部内容,希望文章能够帮你解决javascript – 不包含blockquote的节点的查询选择器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。