[英]How to pull all headings textContents out of HTML and make a <ul> list out of them?
For a blog I want to create a side navigation bar which will pull all blog post titles (written in <h2>
's) and list them inside a <ul>
.对于博客,我想创建一个侧边导航栏,它将拉出所有博客文章标题(用<h2>
编写)并将它们列在<ul>
中。 Here's what I have so far, but for some reason it puts all the headings textContents into a single <li>
, instead of creating separate <li>
's per heading.这是我到目前为止所拥有的,但由于某种原因,它将所有标题 textContents 放入单个<li>
中,而不是为每个标题创建单独的<li>
。 Can anyone tell why?谁能告诉我为什么? I can't figure it out for some reason...由于某种原因我无法弄清楚...
document.addEventListener('DOMContentLoaded', () => { var ul = document.getElementById("sideNav"); var li = document.createElement("li"); var h2 = document.getElementsByTagName("h2"); for (var i = 0; i < h2.length; i++) { li.appendChild(document.createTextNode(h2[i].textContent)); ul.appendChild(li); } })
<h2>Header 1</h2> <h2>Header 2</h2> <h2>Header 3</h2> <h2>Header 4</h2> <ul id="sideNav"></ul>
You are only creating a single li
element, but you need one for each headline.您只创建了一个li
元素,但每个标题都需要一个。 Move the line移动线
var li = document.createElement("li");
inside the loop and it will work.在循环内部,它将起作用。
You only ever create one LI你只能创建一个 LI
Since you use fat arrows, why not use the selection and forEach既然你使用胖箭头,为什么不使用 selection 和 forEach
document.addEventListener('DOMContentLoaded', () => { const ul = document.getElementById("sideNav"); [...document.querySelectorAll("h2")].forEach(h2 => { const li = document.createElement("li"); li.appendChild(document.createTextNode(h2.textContent)); ul.appendChild(li); }) })
<h2>Header 1</h2> <h2>Header 2</h2> <h2>Header 3</h2> <h2>Header 4</h2> <ul id="sideNav"></ul>
or map:或 map:
document.addEventListener('DOMContentLoaded', () => { document.getElementById("sideNav").innerHTML = [...document.querySelectorAll("h2")].map(h2 => `<li>${h2.textContent}</li>`).join(""); })
<h2>Header 1</h2> <h2>Header 2</h2> <h2>Header 3</h2> <h2>Header 4</h2> <ul id="sideNav"></ul>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.