我已成功实现了一些代码,使用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'。
答案 0 :(得分:0)
所以我放弃并转向正则表达式解决方案:
el.innerHTML.replace(/<(?!\s*\/?\s*p\b)[^>]*>/gi,'')