javascript - 通过 CSS 选择器返回 DOM 元素
问题描述
假设我有这些 HTML 行:
<div id="ID1" class="Class1 Class3"></div>
<p id="ID2" class="Class2 Class3"></p>
我希望能够在给定 CSS 选择器或 TagName 的数组中返回 HTML 元素,这就是我目前所拥有的:
const selectors = document.getElementsByClassName("Class3");
let arr = [];
while (selectors) {
arr.push(selectors);
selectors = selectors.parentNode;
}
console.log(arr);
<div id="ID1" class="Class1 Class3"></div>
<p id="ID2" class="Class2 Class3"></p>
此代码有效并返回 HTML 元素,但我如何更改代码以便它只返回 HTML 元素(div 和 p),而不是 HTML 元素以及 CSS 选择器 - 如果可能的话?
所以输出是:[div, p]
编辑
我不能使用document.querySelector
/document.querySelectorAll
或任何库`
解决方案
也许您想做一个for of
并克隆元素以删除属性。像这样...
const selectors = document.getElementsByClassName("Class3");
const arr = [];
for (let selector of selectors) {
const element = selector.cloneNode();
for (let i = element.attributes.length - 1; i >= 0; i--) {
element.removeAttribute(element.attributes[i].name);
}
arr.push(element);
}
console.log(selectors, arr);
请注意,反向遍历顺序很重要
输出
希望能帮助到你。
Protip:现在使用const
andlet
用于 vars。实际上,“ let是新的var ”。
推荐阅读
- javascript - 在数组中创建对象的多个实例
- cocoa - 如何防止 Cocoa 在每个完全不可见的子视图上调用 drawRect
- c# - 如果 CheckBox 是检查不起作用
- video - 如何将从 Shotcut 和 iMovie 等视频编辑软件导出的 mp4 文件大小减小到 youtube 视频等大小/质量比?
- docker - 查找 Docker 插件的参考
- find - 查找并 rm 额外的 srt 文件
- python-3.x - 如何在不同语料库上训练 nltk 中的朴素贝叶斯分类器?
- css - 在 FlatList 中未正确显示页脚和搜索栏
- swift - 数字之间可选字符的正则表达式
- python - 我可以在 CUDA GPU 上使用多少块和线程