2012-12-25 24 views
6

私はwysiwygエディタを調整しています。選択したテキストを削除するアイコンを作成しようとしています。h2です。以前のバージョンで Javascript:execCommand( "removeformat")はh2タグを削除しません

は、次のコマンドは完全に働いた:

oRTE.document.execCommand("removeformat", false, ""); 

しかし、現在のバージョンでは、そのコマンドが正常に、下線、太字、斜体など、選択したテキスト等のタグから削除するものの、それはh2タグを残しそのまま。

(興味深いことに、execCommand("formatblock"...)が正常h2タグを作成します。)

私はexecCommandを放棄し、別の方法を見つけるために持っているつもりですが、私もそれが可能になることを考えていることを考えていますコードの1行以上のもの!提案に感謝します。

答えて

3

これは、提案されたW3C Editing APIsに従っています。書式設定要素のリストがあり、H#要素はリストされていません。これらは単にフォーマットするのではなく、構造的なものとみなされます。これらのタグを削除するのは、ULまたはPを削除するよりも、意味がありません。

+0

私は私の質問は、より明示的に作られている必要がありますね。私は今、何をしますか? – oyvey

+0

特定の要素を削除する必要がある場合は、明示的なDOM操作関数を使用してそれらを検索して削除します。 jQueryはコード行数を減らすのに役立ちます。 – Barmar

+1

私はそれよりも詳しい答えを得るためにここに投稿しました。そして、現在強調表示されているテキストからのみh2タグを削除する必要があることを覚えておいてください。 – oyvey

4

あなたはdivのためにあなたの形式を変更することができ、それが最善の解決策ではないのですが、それは動作し、それは短いです:

document.execCommand('formatBlock', false, 'div') 

選択したテキストから最も近い親を取得するには、この他の解決策は、あなたがそれをアンラップすることができますもあります

var container = null; 
if (document.selection) //for IE 
    container = document.selection.createRange().parentElement(); 
else { 
    var select = window.getSelection(); 
    if (select.rangeCount > 0) 
     container = select.getRangeAt(0).startContainer.parentNode; 
} 
$(container).contents().unwrap(); //for jQuery1.4+ 
1

私はあなたが範囲オブジェクトを使用することができると思う:、これはいくつかのタグ> B <のようにすることができますことに注意してください。 あなたはそれをWeb Developer第3版のProfessional JavaScriptから見つけることができます。その本から 章12(12.4)とチャプター14(14.5)...

例:

var selection = frames["richedit"].getSelection(); 

var selectedText = selection.toString(); 

var range = selection.getRangeAt(0); 

var span = frames["richedit"].document.createElement("span"); 
span.style.backgroundColor = "yellow"; 
range.surroundContents(span); 
関連する問題