在prototypejs中使用stripTags()函数跳过一些标记

时间:2012-01-05 23:14:42

标签: prototypejs strip-tags

我已成功实现了一些代码,使用stripTags()从粘贴的字符串中删除所有HTML。我的下一个目标是使用白色标记标记一些标记,以便在使用.wrap()增加函数的'paste'事件中忽略它们。

我正在使用prototype.js作为一个框架,并且已经慢慢地研究了学习框架和javascript的日益增长的痛苦,但这个问题带来了一些障碍。

我已经google了一下,发现看起来像两个很棒的解决方案,但我似乎没有正确实现它们。 找到解决方案: http://perfectionkills.com/wrap-it-up/(表示要删除的标签的功能) 和 http://pastebin.com/xbymCFi9(允许标记保留的功能)

我几乎从后者复制并粘贴。 如果我从代码中拉出“br”,则忽略正则表达式并删除所有html。如果我离开它,就不会粘贴任何东西。

这就是我拼凑在一起的东西(我觉得因为无法解决这个问题而感到愚蠢!)。

String.prototype.stripTags = String.prototype.stripTags.wrap( 
    function(proceed, allowTags) { 
            if (allowTags) {
            if (Object.isString(allowTags)) allowTags = $w(allowTags)
            this.gsub(/(<\/?\s*)([^\s>]+)(\s[^>]*)?>/, function(match) {
                if (allowTags.include(match[2].toLowerCase()))
            return match[1] + match[2] + match[3] + '>'
        })
        } else {
        // proceed using the original function
        return proceed(); 
    }
  });


 WysiHat.Commands.promptLinkSelection = function() {
  if (this.linkSelected()) {
    if (confirm("Remove link?"))
      this.unlinkSelection();
  } else {
    var value = prompt("Enter a URL", "http://www.alltrips.com/");
    if (value)
      this.linkSelection(value);
  }
}

document.on("dom:loaded", function() {
  var editor = WysiHat.Editor.attach('event_desc');
  var toolbar = new WysiHat.Toolbar(editor);

  editor.observe("paste", function(event) {
    var el = $(this);
    setTimeout(function() {
        var pText = el.innerHTML.stripTags('br');
        //alert(pText);
        $('event_desc_editor').update(pText);
        $('event_desc').setValue(pText);
     }, 0);
});

String.prototype.stripTags = String.prototype.stripTags.wrap( function(proceed, allowTags) { if (allowTags) { if (Object.isString(allowTags)) allowTags = $w(allowTags) this.gsub(/(<\/?\s*)([^\s>]+)(\s[^>]*)?>/, function(match) { if (allowTags.include(match[2].toLowerCase())) return match[1] + match[2] + match[3] + '>' }) } else { // proceed using the original function return proceed(); } }); WysiHat.Commands.promptLinkSelection = function() { if (this.linkSelected()) { if (confirm("Remove link?")) this.unlinkSelection(); } else { var value = prompt("Enter a URL", "http://www.alltrips.com/"); if (value) this.linkSelection(value); } } document.on("dom:loaded", function() { var editor = WysiHat.Editor.attach('event_desc'); var toolbar = new WysiHat.Toolbar(editor); editor.observe("paste", function(event) { var el = $(this); setTimeout(function() { var pText = el.innerHTML.stripTags('br'); //alert(pText); $('event_desc_editor').update(pText); $('event_desc').setValue(pText); }, 0); });

(您可能会识别37Signals文本编辑器中的WysiHat代码)

注意:您可以看到警告已注释掉。如果我确实提醒了ptext,我会返回'​​undefined'。

1 个答案:

答案 0 :(得分:0)

所以我放弃并转向正则表达式解决方案:

el.innerHTML.replace(/<(?!\s*\/?\s*p\b)[^>]*>/gi,'')