如何使用NodeJs删除非标签Html元素

How to Remove a Non Tag Html Element using NodeJs?

本文关键字:标签 Html 元素 删除 何使用 NodeJs      更新时间:2023-09-26

我有一个这样的HTML字符串:

<div>
   <p>a</p>
   <p>b</p>
   <p>c</p>
   <img src='a.jpg'>
   <img src='b.jpg'>
   d
   e
   f
</div>

我使用了sanitation -html只允许标记p和img,但是,它仍然返回所有文本。

我想要的最后一个结果是删除d, e和f,如下所示:

<div>
   <p>a</p>
   <p>b</p>
   <p>c</p>
   <img src='a.jpg'>
   <img src='b.jpg'>
</div>
下面是我使用sanititizehtml: 的代码
var htmlString = sanitizeHtml(news.htmlcontent, {
    allowedTags: [ 'p', 'img' ],
    exclusiveFilter: function(frame) {
        return (frame.tag === 'img' && frame.attribs.src.indexOf('rfa_resources/graphics') !== -1);
    }
});

如果代码位于<div>标记之间,那么下面的示例将删除不需要的文本。

var sanitizeHtml = require('sanitize-html');
var HTMLstring = "<div><p>a</p><p>b</p><p>c</p><img src='a.jpg'><img src='b.jpg'>def</div>";
var sanitizedString = sanitizeHtml(HTMLstring, {
    allowedTags: [ 'p', 'img', 'div' ],
    exclusiveFilter: function(frame) {
        return (frame.tag === 'img' && frame.attribs.src.indexOf('rfa_resources/graphics') !== -1);
    },
    transformTags: {
        'div': function(tagName) {
            return {
                tagName: 'div',
                text: ''
            };
        }
    },
});
console.log(sanitizedString); // <div><p>a</p><p>b</p><p>c</p><img src="a.jpg" /><img src="b.jpg" /></div> 

那些正在寻求使用jquery实现相同目标的人,以下是帮助实现这一目标的代码:

function getText(str){
    $('body').append('<section id="test"></section>');
    $('#test').append(str);
    var text = $("#test div").contents().filter(function() {
      return this.nodeType == 3;
    }).text();
    $('#test').remove();
    return text;
}
var myString = "<div><p>a</p><p>b</p><p>c</p><img src='a.jpg'><img src='b.jpg'>def</div>";
var text = getText(myString);
var result = myString.replace(text, '');
console.log(result); // <div><p>a</p><p>b</p><p>c</p><img src='a.jpg'><img src='b.jpg'></div>

但请注意,所有的文本节点应该出现在一起,否则代码将需要很少的修改来删除所有的。