如何解决在document.queryselector
我试图访问某个段落的所有强标签,因此我遍历了文档中的所有段落,并且代码解释了其余的
let paragraphs = document.getElementsByTagName("p");
for(let i = 0; i < paragraphs.length; i++) {
var element = document.querySelector(`${paragraphs[i]} > strong`)
console.log(element)
if( element == null) {
continue;
}
else{
var element = document.querySelector('p > strong')
element.style = "";
break;
}
}
当我尝试执行此操作时,由于此行代码而出现错误
var element = document.querySelector(`${paragraphs[i]} > strong`)
这是错误:未捕获的DOMException:无法在'Document'上执行'querySelector':'[object HTMLParagraphElement]> strong'不是有效的选择器。
非常感谢您的帮助。
解决方法
您需要传递选择符字符串,例如p
,.class
或#id
代替该变量,而不是HTML元素。
我想您实际上是在对段落元素执行querySelector
method而不是document
对象:
var element = paragraphs[i].querySelector(':scope > strong')
(:scope
的作用参见here。)
以下是我想出的解决您的问题的方法:
抓取页面上strong
标记内的所有p
元素
现在您可以在节点列表上使用.forEach()
方法来操作元素。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<title>select strong</title>
</head>
<body>
<p><strong>strong 0</strong>something <strong>strong1</strong></p>
<p>something <strong>strong2</strong></p>
<p>something <strong>strong3</strong></p>
<div>
<div>
<p>strong inside <strong>div</strong></p>
</div>
</div>
<script>
// this is a node list with all `strong` tags inside `p`
const strongStuff = document.querySelectorAll("p > strong");
// you can use .forEach() method on a node list
strongStuff.forEach((strongEl) => console.log(strongEl.innerText));
</script>
</body>
</html>
或者,作为可执行代码段:
// this is a node list with all `strong` tags inside `p`
const strongStuff = document.querySelectorAll("p > strong");
// you can use .forEach() method on a node list
strongStuff.forEach((strongEl) => console.log(strongEl.innerText));
<p><strong>strong 0</strong>something <strong>strong1</strong></p>
<p>something <strong>strong2</strong></p>
<p>something <strong>strong3</strong></p>
<div>
<div>
<p>strong inside <strong>div</strong></p>
</div>
</div>
如果您需要更多说明,请告诉我。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。