typescript 删除除allowed之外的所有标记,保留HTML中的文本内容

fruv7luv  于 2023-04-13  发布在  TypeScript
关注(0)|答案(1)|浏览(122)

输入html元素,其内容必须转换为所需的格式。必须删除所有未解析的标记,但文本必须保留。input元素的内容可以以任何方式嵌套。允许的标记列表可以更改。不使用RegEx。
我的解决方法。创建一个允许标记的列表。递归地遍历所有childNodes,到达没有子元素的元素。对照列表检查每个Node。如果有-什么都不做,如果没有-删除,留下内容。
这就是我所坚持的。也许需要一种不同的方法。如果是这样的话,我很乐意去弄清楚。我用打字机写。

const formating = (currElem: HTMLElement, whiteList: Array<string>) => {
    currElem.childNodes.forEach((child) => {
        console.log(child)
        if (child.hasChildNodes())
            formating(child as HTMLElement, whiteList);
        if (!(child.nodeName in whiteList)) {              
            
        } 
    });
}
kr98yfug

kr98yfug1#

您正在寻找element.tagNameelement.replaceWith

// select every tag
let allElements = document.querySelectorAll('*')

// allowed list of tags as a set for perf. UPPERCASE as in tagName
const allowedTags = new Set(['A', 'B', 'DIV'])

// to start from the end, from deeper tags
let allElementsReversed = allElements.reverse()

for (let tag of allElementsReversed) {
  if (!allowedTags.has(tag.tagName)) {
    // replace bad tag with its children
    tag.replaceWith(...tag.childNodes)
  }
}

相关问题