删除除<a></a>之外的html字符串中的所有标记

时间:2014-03-04 10:18:39

标签: javascript jquery html regex

我有一些html,除了一个具有已知类的具体<a>之外,我必须清除所有标签。 这是html:

var string = '<span class="so_sentence"><span> Some text <a class="so_footnote-ref" href="#footnote-104008-4" id="footnote-104008-4-backlink">[1]</a></span></span>';

我附加了JQuery,所以我得到了字符串的jQuery对象。

var html = $(string);

现在我必须清除所有范围内的字符串以及可能的其他标记,但<a>除外:

<a class="so_footnote-ref" href="#footnote-104008-4" id="footnote-104008-4-backlink">[1]</a>

所以我的最后一个字符串应该是:

'Some text <a class="so_footnote-ref" href="#footnote-104008-4" id="footnote-104008-4-backlink">[1]</a>'

也必须可以在结果上调用此函数,因此它必须是合适的类型:

function _trim(string){
    return string.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,'').replace(/\s+/g,' ');
}

2 个答案:

答案 0 :(得分:5)

试试这个:

$(string).find(':not(a)').contents().unwrap()

这会对每一段HTML代码都很苛刻。

示例:http://jsfiddle.net/E3RWL/1/

答案 1 :(得分:0)

这是我找到的一个功能:

您可以在http://phpjs.org/functions/strip_tags/

了解更多相关信息

使用Javascript:

var ret = strip_tags('<p>Kevin</p> <br /><b>van</b> <i>Zonneveld</i>', '<i><b>');

// returns: 'Kevin <b>van</b> <i>Zonneveld</i>'

function strip_tags (input, allowed) {
  allowed = (((allowed || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>)
  var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,
    commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
  return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
    return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
  });
}