[英]How to get header ID from the HTML/DOM using react and typescript
我有一个应用程序,它使用 marked.js 将一些 markdown 文件转换为 html,并将转换后的 HTML 显示到 web 页面。 在下面的代码片段中,我遍历文本节点以获取显示的所有原始文本值,将它们存储在某个索引中,其中文本值对应于数字 id
// iterate over file objects which contain raw markdown
files.forEach(file => {
// convert file's markdown string to html string using marked.js
const htmlString = marked(file.markDown);
const parser = new DOMParser();
const doc = parser.parseFromString(htmlString, 'text/html');
const walker = document.createTreeWalker(doc, NodeFilter.SHOW_TEXT);
// const walker = document.createTreeWalker(doc, NodeFilter.SHOW_ELEMENT);
let currentNode = walker.currentNode;
while (currentNode != null) {
if (currentNode.textContent != null) {
// index every HTML element's raw text value and assign it to an id
searchIndexReference.push({ id: id++, text: currentNode.textContent });
//console.log('currentNode');
//console.log(currentNode);
}
const nextNode = walker.nextNode();
if (nextNode != null) {
currentNode = nextNode;
} else {
break;
}
}
});
我想知道如何获取 header id 值并将其也添加到索引中,直到遇到下一个 header id 。 这样,searchIndexReference 会将文本值条目链接到它所在的 header。
假设我们下面有一些 HTML:
<h1 id="top-most-header">Top Most Header</h1>
<p>Here is some text 1</p>
<p>Here is some text 2</p>
<h2 id="some-other-section-header">Some Other Section Header</h1>
<p>Here is some text 3</p>
<p>Here is some text 4</p>
这些条目将像这样附加到 searchIndexReference object。 (当前的 header id 值被存储直到遇到下一个 header)
{id: 1, headerId: 'top-most-header', text: 'Top Most Header'}
{id: 2, headerId: 'top-most-header', text: 'Here is some text 1'}
{id: 3, headerId: 'top-most-header', text: 'Here is some text 2'}
{id: 4, headerId: 'some-other-section-header', text: 'Some Other Section Header'}
{id: 5, headerId: 'some-other-section-header', text: 'Here is some text 3'}
{id: 6, headerId: 'some-other-section-header', text: 'Here is some text 4'}
这也适用于嵌套元素,如 ul、li 等。
我知道什么时候我打印出 currentNode 使用
const walker = document.createTreeWalker(doc, NodeFilter.SHOW_ELEMENT);
它显示完整的 HTML header 元素而不是 NodeFilter.SHOW_TEXT,但我不确定从那里到 go 的位置。
检查父节点,如果它是 header 则保存 id
if(currentNode.parentNode.nodeName === 'H1') {
headerId = currentNode.parentNode.id
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.