javascript - querySelector 不使用类但使用 id
问题描述
我有以下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) {}
解决方案
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() 返回文档中与指定选择器或选择器组匹配的第一个元素。如果没有找到匹配项,则返回 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));
};
});
推荐阅读
- ruby-on-rails - 将目录导出为 .zip 文件的最佳 AWS 存储选项?
- jquery - 使用列表子项内带有链接的列表关闭下拉菜单
- python - 条件后未定义变量
- rust - 如何在不让编译器抱怨借用地图的情况下使用 HashMap 的 ref 值
- javascript - React - TypeError:无法读取未定义的属性'imageurl'
- x86 - 为什么要退出外部中断?
- msbuild - 为什么.Net Core 2.2 现在发布大量其他 dll
- java - 来自响应的 Internet Explorer Cookie 未覆盖现有 Cookie
- android - 何时记录 Firebase 中的 first_open 事件?
- python - builtins.TypeError: 不支持的操作数类型 -: 'list' 和 'int'