2

我用这段代码去除了所有标签,但我不想保存一些标签,等等......我该怎么办?我不明白如何过滤标签

/***************************************************
    STRIP HTML TAGS
    ****************************************************/
    function strip_tags(html){

        //PROCESS STRING
        if(arguments.length < 3) {
            html=html.replace(/<\/?(?!\!)[^>]*>/gi, '');
        } else {
            var allowed = arguments[1];
            var specified = eval("["+arguments[2]+"]");
            if(allowed){
                var regex='</?(?!(' + specified.join('|') + '))\b[^>]*>';
                html=html.replace(new RegExp(regex, 'gi'), '');
            } else{
                var regex='</?(' + specified.join('|') + ')\b[^>]*>';
                html=html.replace(new RegExp(regex, 'gi'), '');
            }
        }

        //CHANGE NAME TO CLEAN JUST BECAUSE 
        var clean_string = html;

        //RETURN THE CLEAN STRING
        return clean_string;

**编辑* * ** 这是我的 HTML 代码

<body class="portrait" onLoad="prepareImages()">
    <div id="title_wrapper"><h2 id="title"><a href="[[[LINK]]]">[[[TITLE]]]</a></h2></div>
    <h2 id="subtitle">[[[DATE]]]</h2>
     <div id="content">
        [[[FULL CONTENT]]] etc....
    </div>

我以这种方式使用了您的功能(我必须替换的是:[[[FULL CONTENT]]] 等......)

(strip_tags(contentElem,"<img>");

没有结果。如何使用 [[[FULL CONTENT]]] 等重写 [[[FULL CONTENT]]] 等.... 没有 html 标签,除了?

4

3 回答 3

4

评估?呃,这真是丑陋的代码。它使用正则表达式模式匹配所有标签。

  • 如果函数调用的参数少于 3 个,它只会删除所有标签。
  • 如果函数调用至少有 3 个参数:
    • 第三个参数是一个字符串,如"a", "b", "strong". 由于丑陋的结构,引号是必需的。evil eval
    • 如果第二个参数是真值(true例如),第三个参数是允许的标签列表
    • 如果第二个参数是假值(false例如),第三个参数是被拒绝的标签列表

如果您需要适当的strip_tags功能,请查看http://phpjs.org/functions/strip_tags:535

于 2012-01-05T19:05:32.063 回答
3

这是带有允许标签的 strip_tags() (来自 phpjs.org )。

// allow can be a string like '<b><i>'
function strip_tags(str, allow) {
  // making sure the allow arg is a string containing only tags in lowercase (<a><b><c>)
  allow = (((allow || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join('');

  var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi;
  var commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
  return str.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
    return allow.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
  });
}
于 2012-05-01T05:05:38.203 回答
-1

如果使用 DOM,此操作要简单得多。我不知道为什么人们要为此尝试使用正则表达式。

/**
 * Removes all tags with the provided tagName.
 * @param {Element} el The root element.
 * @param {string} tagName The tagName to match.
 * @example
 *   >> document.body.innerHTML;
 *   "<p><img src="foo.jpg">Some <strong>text</strong></p>"
 *   >> stripTags(document.body, 'img');
 *   undefined
 *   >> document.body.innerHTML;
 *   "<p>Some <strong>text</strong></p>"
 *   >> stripTags(document.body, 'strong');
 *   undefined
 *   >> document.body.innerHTML;
 *   "<p>Some text</p>"
 */
function stripTags(el, tagName) {
  var els = el.getElementsByTagName(tagName.toUpperCase());
  for (var i = 0; i < els.length; i++) {
    while (els[i].firstChild)
      els[i].parentNode.insertBefore(els[i].removeChild(els[i].firstChild), els[i]);
    els[i].parentNode.removeChild(els[i--]);
  }
}

这将删除所有标签(不是它们的内容),我认为这是strip_tags行为方式。

于 2012-07-17T18:34:53.823 回答