简体   繁体   English

如何从 HTML 中提取所有标题 textContents 并制作<ul>列出来?</ul>

[英]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...由于某种原因我无法弄清楚...

js.fiddle js.fiddle

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM