【发布时间】:2021-12-28 16:38:42
【问题描述】:
有没有办法在 JavaScript 中获取document.querySelector 的字符串参数?
例如,假设我有这个现有的选择器:
const myElement = document.querySelector("div[some-complicated=selector]");
有没有办法直接从myElement得到"div[some-complicated=selector]"?
我知道理论上我可以将选择器本身放入一个变量中,然后将该变量传递给querySelector,然后在其他地方引用该变量。但如果可能的话,我想避免这样做。
我的实际用例是事件委托;我想避免重复相同的选择器。所以目前我正在做:
document.querySelectorAll("[data-component=tabs]").forEach((element) => {
const tabs = element.querySelectorAll("[role=tab]");
document.addEventListener("click", (event) => {
if(!(event.target.matches("[role=tab]") && event.path.indexOf(element) > -1)) {
return;
}
// Do stuff...
});
});
所以基本上我想从querySelectorAll 中提取选择器字符串,这样我就可以将它传递给matches 方法,但不必改变[role=tab]。
【问题讨论】:
-
不,
length是 NodeList 中的唯一属性,并且没有任何方法可以获取用于创建列表的选择器。 -
好的,那么节点呢?假设我使用的是
querySelector还是querySelectorAll(selector)[0]?我简要查看了Node 文档并没有看到任何内容,但是该页面不包含classList之类的内容,所以我一定遗漏了一些东西。 -
节点不知道引用是如何获取的。变量有什么问题?
-
它本身并没有什么特别的问题,只是看起来很冗长。另外,这似乎应该有一个简单的答案,但由于我不知道,所以我很好奇。
-
你可以自己写querySelectorAll方法,见jsfiddle.net/6nxp1kjw。
标签: javascript string dry