stripTags()を使用して、貼り付けた文字列からすべてのHTMLを削除するコードを正常に実装しました。次の目標は、いくつかのタグに白いフラグを付けて、関数を拡張するために.wrap()を使用して'paste'イベントで無視されるようにすることです。
私はprototype.jsをフレームワークとして使用しており、フレームワークとjavascriptの両方を学習するという苦痛の高まりをゆっくりと乗り越えてきましたが、この問題は少し障害となっています。
私は少しグーグルで調べて、2つの素晴らしい解決策のように見えるものを見つけましたが、それらを正しく実装していないようです。 見つかった解決策: 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);
});
(37SignalsテキストエディタからWysiHatコードを認識できます)
注:アラートがコメントアウトされているのを確認できます。ptextにアラートを送信すると、「undefined」が返されます。