javascript - 如何过滤 querySelectorAll 结果?
问题描述
我想通过从页面中提取 h2、h3、h4 和 h5 标记来创建嵌套目录。所以我写了这个:
var enterycontent = document.getElementsByClassName("entry-content")[0]
var htags = enterycontent.querySelectorAll('h2,h3,h4,h5');
var ul = document.getElementById("table_of_contents");
for (i = 0; i < htags.length; i++) {
var nhs = htags[i];
htags[i].setAttribute("id", "htag" + i);
var innerhtag = nhs.innerText;
var li = document.createElement('li');
ul.appendChild(li);
var hrefid = '#htag' + i;
li.innerHTML = ('<a href="#htag' + i + '">' + innerhtag + '</a>');
}
它工作得很好。但我想再添加一件事,所以我尝试在 h3、h4、h5 标签中添加“子”类,在h2 标签中添加“父”类。我尝试使用 .includes 函数,但它不起作用。
if(nhs.includes("h2")) {
//css adding rules...
}
如何过滤 querySelectorAll 结果并添加IF 条件以添加“子”和“父”css 类?
解决方案
您可以使用nodeName
来检查元素的类型。所以在你的情况下,这会起作用。
if (nhs.nodeName === "H2") {
// Do something
}
为了使用您的代码,它最终会看起来像下面这样。
for (i = 0; i < htags.length; i++) {
var nhs = htags[i];
htags[i].setAttribute("id", "htag" + i);
var innerhtag = nhs.innerText;
var li = document.createElement('li');
ul.appendChild(li);
var hrefid = '#htag' + i;
li.innerHTML = ('<a href="#htag' + i + '" target="_blank" data-localscroll="true">' + innerhtag + '</a>');
if (nhs.nodeName === "H2") {
// Do something
} else if (nhs.nodeName === "H3" || nhs.nodeName === "H4" || nhs.nodeName === "H5") {
// Do something else
}
}
重要 nodeName
将以大写字母返回元素的类型,因此检查h2
不起作用,您需要检查H2
.
推荐阅读
- javascript - 赛普拉斯:滚动元素进入视图 - 真或假
- python - Python 创建一个 X 元素列表,其中元素按 Y 计数。例如,如果 X = 4 且 Y = 5,您将收到 [5, 10, 15, 20]
- sql-server - SSIS - 强制 Excel 连接
- python - ImportError:libavcodec.so.57:无法打开共享对象文件:没有这样的文件或目录
- css - 过渡持续时间 css 两种方式
- sql - 获取存储为小数的日期之间的值
- javascript - 如何在单独安装的组件树之间共享 React 上下文状态
- java - 如何从 JDateChooser 获取时间?
- ironpython - Spotfire 交叉表在 2 列或更多列(组/层次结构)时显示/隐藏“n”行
- android - BigQuery 中的 Firebase 事件缺少“device.advertising_id”