javascript - CSS :not selector act strangely on section tag

标签 javascript jquery html css

我试着理解 :not选择器工作。首先,我猜所有在 querySelectorAll 中工作的东西函数在 css 中的工作方式相同。

我想要完成的是从页面中获取除我不需要的元素之外的元素列表。这就是我使用这个小功能的原因:

getItems() {
 return document.querySelectorAll('div:not(.sponsored):not(#hot_news) .item-story');
}

重要的是每个部分都包含一个 <li>item-story类,但我想排除 <div> 中的那些同类sponsored和一个 <section>具有 ID hot_news .

在这个 fiddle 中,您可以找到我已经尝试过的示例,它似乎在 CSS 中工作正常,但在 JS 中却不行,即使它看起来有效,我也不明白为什么它应该。

http://jsfiddle.net/RM8nZ/72/

最佳答案

:not(foo) bar匹配所有 bar有一些祖先的元素不是 foo .这并不意味着没有祖先是 foo .

相反,您应该获得所有 .item-story元素并排除匹配 .sponsored .item-story, #hot_news .item-story 的元素.

var set = new Set(document.querySelectorAll('.item-story'));
var excluded = document.querySelectorAll('.sponsored .item-story, #hot_news .item-story');
for(let el of excluded) set.delete(el);

我使用了 ES6 集,因为操作需要平均是次线性的(可能是常数)。但是,如果您想支持旧浏览器,请使用数组并查看 JavaScript array difference .

关于javascript - CSS :not selector act strangely on section tag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37134094/

相关文章:

javascript - 使用 webpack 从 angularjs 模块加载特定指令

javascript - 在嵌套指令中,为什么我的子指令获取父指令的属性?

javascript - 在 iframe 中访问 TinyMCE 当前输入

javascript - 将独立的 View 文件放入codeigniter中另一个html中的div中

php - 使用 JQuery 动态地通过 ajax 发送 json 格式的帖子表单数据

javascript - 使用 jquery/ajax 获取点击将值项编辑到另一个页面

jquery - 如何在显示 jQuery ui 选项卡时插入 JavaScript?

java - UTF-8 URL 解码/编码

javascript - 无限滚动: Load all data from database and scroll to show more

javascript - 无法对包含相同类的所有元素使用 .replace()