在下面的HTML标记中,我想查询<div>
的{{1}}设置为“ true”,而所包含的孩子将data-parent
设置为“ true”并且内部html是“男性”。
data-child-gender
鉴于上述情况,预期的 <div id="grandparent">
<div id="parent1" data-parent="true">
<div id="child1" data-child-gender="false">
male
</div>
</div>
<div id="parent2" data-parent="true">
<div id="child2" data-child-gender="true">
female
</div>
</div>
<div id="parent3" data-parent="false">
<div id="child3" data-child-gender="true">
female
</div>
</div>
<div id="parent4" data-parent="true">
<div id="child4" data-child-gender="true">
male
</div>
</div>
</div>
为 parent4 。
要使用的JavaScript querySelector是什么?
答案 0 :(得分:3)
首先使用querySelectorAll
会得到一个数组。然后对其进行迭代,并检查并获取具有必需data
属性的元素。
之后,您可以使用if
并检查其中的内容
let k = document.querySelectorAll('[ data-parent=true]').forEach(function(item) {
let elem = item.querySelector('[data-child-gender=true]');
if (elem !== null && elem.innerHTML.trim() === 'male') {
console.log(item.id)
}
})
<div id="grandparent">
<div id="parent1" data-parent="true">
<div id="child1" data-child-gender="false">
male
</div>
</div>
<div id="parent2" data-parent="true">
<div id="child2" data-child-gender="true">
female
</div>
</div>
<div id="parent3" data-parent="false">
<div id="child3" data-child-gender="true">
female
</div>
</div>
<div id="parent4" data-parent="true">
<div id="child4" data-child-gender="true">
male
</div>
</div>
</div>
答案 1 :(得分:2)
没有一个querySelector
可以用于此目的(因为您不能使用它来选择元素内的特定文本)。但是,您可以将.querySelector()
与.filter()
结合使用以获得更具体的结果:
const true_children = [...document.querySelectorAll("[data-parent='true'] [data-child-gender='true']")];
const res = true_children.filter(({innerHTML:g}) => g.trim() === "male");
console.log(res);
<div id="grandparent">
<div id="parent1" data-parent="true">
<div id="child1" data-child-gender="false">
male
</div>
</div>
<div id="parent2" data-parent="true">
<div id="child2" data-child-gender="true">
female
</div>
</div>
<div id="parent3" data-parent="false">
<div id="child3" data-child-gender="true">
female
</div>
</div>
<div id="parent4" data-parent="true">
<div id="child4" data-child-gender="true">
male
</div>
</div>
</div>
答案 2 :(得分:0)
问题描述的问题无法单独使用查询选择器解决。这是由于以下原因:
data-child-gender="true"
时,将无法返回父元素。查询选择器将返回子div。如果您要在JS中使用查询选择器,则可以通过使用JavaScript来解决这两个限制。
下面的代码片段应该可以工作。
document.querySelectorAll('div[data-parent=true] div[data-child-gender=true]')
.filter(function(elem) {
return elem.innerText === 'male'; // filter the elements containing male string.
})[0].parentElement; // return the parent of matched element.
硒也可以得出等效逻辑。否则,如果这种太多的逻辑是不可接受的,则可以始终使用更丰富的xpath
选择器。 xpath
不会有上述任何限制。