我在下面的html
块中:
<a class="item">
<i class="sign out icon" id="out1"></i>
<span class="text out" id="out2">Sign out</span>
</a>
如果单击a
中的任何元素,我需要触发一个动作,当我使用id
项时,以下代码可以正常工作:
document.querySelector("#out1, #out2").onclick = function(e) {}
但是当我尝试class
项时,以下内容不起作用:
document.querySelector(".sign .out .icon, .text .out").onclick = function(e) {}
我尝试通过以下内容使其变得简单,但效果不佳:
document.querySelectorAll(".out").onclick = function(e) {}
答案 0 :(得分:2)
document.querySelector
的工作方式类似于css
选择器,document.querySelector('.sign .out .icon')
将在icon
内的元素.out
中寻找类为.sign
的元素,如果您删除空格,它应该可以正常工作:
document.querySelector(".sign.out.icon, .text.out").onclick = function(e) {}
请记住,querySelector
将返回第一个匹配项,因此选择器字符串中的逗号不是很有用,MDN:
Document方法querySelector()返回其中的第一个Element 与指定选择器或一组匹配的文档 选择器。如果没有找到匹配项,则返回null。
document.querySelectorAll
返回一个节点列表,您必须遍历它并处理onclick
或使用[0]
访问第一个元素:
document.querySelectorAll(".out")[0].onclick = function(e) {}
const a = document.querySelector(".sign .out .icon, .text .out");
const b = document.querySelector(".sign.out.icon, .text.out");
console.log({a, b});
const c = document.querySelectorAll(".out");
console.log(c[0]);
<a class="item">
<i class="sign out icon" id="out1"></i>
<span class="text out" id="out2">Sign out</span>
</a>
要添加ALL
的列表器,则可以按以下方式使用forEach
:
var out = document.querySelectorAll(".out");
out.forEach((e) => {
e.onclick = function(e) {
fetch('http://localhost:8000/logout')
.then(window.location.reload(true));
};
});