0

我想<img>从数据库返回的字符串中去除标签及其内容。

示例字符串

//I want to retrive dummy texts from my string.
var string = "<img src='test.jpg'/>dummy texts <img src='text.jpg'/> dummby text dummy texts";

我试过了

if (string.indexOf('<img') != -1) {
    var newString = $(string).filter(function() {
        return this.tagName != 'img';
    }).text();
}

但是,我的数据库有糟糕的数据,有时会返回

//There is no closure for image tag. 
var string = "<img src='test.jpg'/>dummy texts <img src='text.jpg'/> dummby text dummy texts";

我的代码会剥离整个字符串。

图像标签位置不同。

如何<img>有效地剥离标签?

4

4 回答 4

2
var str  = "<img src='test.jpg'>dummy texts <img src='text.jpg'>",
    text = ​$('<div />').append(str).remove('img').text();

小提琴

于 2012-12-07T00:49:46.427 回答
1

好吧,正确的答案是您不使用 regex 解析 HTML。您需要使用适当的 XML 解析器。幸运的是,您的浏览器就是其中之一!您可以尝试使用 jQuery 的文档片段:

function stripImages(markup) {
  var fragment = $("<body></body>").html(markup);
  fragment.find("img").remove();
  return fragment.html();
}

var s = "<img src='test.jpg'/>dummy texts <img src='text.jpg'/> dummby text dummy texts"
stripImages(s);

这将创建一个文档片段,让您剥离图像标签,然后取回经过净化的 HTML。

于 2012-12-07T00:44:03.660 回答
1

对我有用的是将字符串包装在一个 DOM 元素中,您可以像这样动态创建它:

var el = $('<div>');
el.html("<img src='test.jpg'>dummy texts <img src='text.jpg'> dummby text dummy texts");
el.find('img').remove();
console.log(el.html());

然后只需搜索并删除特定元素(图像或其他)

于 2012-12-07T00:52:43.307 回答
1

也可以在不先附加的情况下做到这一点。

var str = "<img src='test.jpg'/>dummy texts <img src='text.jpg'/> dummby text dummy texts";
str = str.replace(/<img[^>]+>/g, '');
于 2012-12-07T01:16:17.313 回答