0

IE(すべてのバージョン)を除くすべてのブラウザーでWYSIWYGエディターが動作しています。以下の関数に問題があります:

function tag(tag) {
    var range = window.frames['textEditor'].getSelection().getRangeAt(0);
    var newNode = document.createElement(tag);
    range.surroundContents(newNode);
}

これを修正する方法について何かアイデアはありますか?

4

3 に答える 3

2

IEは大きな赤ちゃんなので、範囲をサポートしていません。ただし、それはあなたが望むことをしますが、別々のロジックを使用します。IEを形にする方法については、QuirksmodeRangeページをご覧ください。

于 2012-05-20T00:38:11.233 に答える
2

IE <9は、標準のDOM範囲と選択をサポートしていません。これらおよびすべての主要なブラウザーで機能するこれらのAPIの実装については、私のRangyライブラリーを使用できます。

余談ですが、範囲のsurroundContents()メソッドの使用は、範囲が同じノードまたは同じノードの子で開始および終了する場合にのみ機能します。たとえば、次のような範囲では機能しません(範囲の境界は角かっこで示されます)。

One |two <b>three| four</b>

このような範囲をスタイリングするには、より微妙なアプローチが必要になります。

于 2012-05-20T01:11:02.387 に答える
0

誰かがスクリプトを必要とするなら、私は今それをすべてのブラウザで動作させています私はそれを以下に投稿します

   function changeHeading(heading) {

  if($.browser.msie && $.browser.version == 7 || $.browser.version == 8)
  {
    theSelection = window.frames['textEditor'].document.selection.createRange().htmlText;
    window.frames['textEditor'].document.selection.createRange().pasteHTML("<"+heading+">"+theSelection+"</"+heading+">")
    $("#textEditor").contents().find(heading).unwrap();
  }

  else {
    var needle =window.frames['textEditor'].getSelection().getRangeAt(0);
    var haystack = $('#textEditor').contents().find("body").text();
    var newText = haystack.replace(needle,"<"+heading+">"+needle+"</"+heading+">");
    $('#textEditor').contents().find("body").html(newText);
    $("#textEditor").contents().find(heading).unwrap();
}
}

助けてくれてありがとう

于 2012-05-20T18:39:05.990 に答える