JavaScript 选择器 : find nodes which contains descendants with specific attribute

标签 javascript jquery jquery-selectors css-selectors

是否可以使用Javascript选择器来查找包含具有特定属性的后代的节点

例如,我想从当前页面删除所有非销售产品:

var notPriceSales = document.querySelectorAll
    ("body div.contentArea>div.right ul>li span:not(.priceSale)")

这将找到非销售产品的价格标签,但我想找到具有后代的 li:span:not(.priceSale)

这样我就可以删除所有非销售产品:

Array.prototype.forEach.call( notpriceSales, function( node ) {
  node.parentNode.removeChild( node );
});

如何使用选择器来选择其后代节点具有某些特殊属性的节点?

谢谢

最佳答案

虽然在 vanilla JS 中当然可行,但在 jQuery 中这实际上非常简单。

首先,由于我看不到您的 HTML 结构,并且我只能根据您问题中的选择器进行有根据的猜测,所以我只是假设有一些父元素是所有这些元素所共有的li 标签。为了确保您只选择这些产品跨度(即,而不仅仅是页面上没有“.priceSale”类的任何跨度),您可以将其用作 jQuery 选择器的基本上下文。我会让您弄清楚您想要什么,并在下面的代码中将其引用为 $parentContainer

一旦有了基本上下文,获取所需的 li 元素实际上只需两部分:

$parentContainer.find("span").not(".priceSale").closest("li");

第一部分将收集容器中的所有“非销售”跨度,然后第二部分将收集初始组中每个跨度的最接近的祖先 li 元素,并将他们组成一个小组。

此时,只需获取生成的 li 元素组和 .remove() 它们, display: none; 它们。 。 。无论你想做什么来抑制它们的出现。

关于JavaScript 选择器 : find nodes which contains descendants with specific attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37229565/

相关文章:

javascript - 将字符串传递到正则表达式中

jquery - 如何选择除 type=password 之外的所有输入和文本区域

jquery - 如何判断复选框是否被选中?

javascript - 循环内元素的动态总和

javascript - 在javascript中读取cookie,由asp.net c#code制作

javascript - 获取元素后面的文本

jquery - 使用 jQuery 查找选定控件或文本框的标签

javascript - 检查背景图像是否已加载

javascript - Web 上的 AJAX 与 PHP - 安全性

jquery append() 不写结束标记