2012-04-12 4 views
1

私は単語を選択し、それを要素構造体で置き換えようとしています。以前はIE=EmulateIE7を使用していましたが、以下のコードが動作していました。その他のいくつかの問題のため、私はIE7メタをエミュレートし、以下のinsertNodeが機能しなくなりました。RangyとInsertNodeの問題

function updateNodeAtRange(text, frag) { 
    var range = getFirstRange(); 
var htmlcontent='<span id="AuniqueId" class="style1">'+frag+'</span><span id="BuniqueId" class="style2">'+text+'</span>'; 
if (range) { 
    rangy.getSelection().deleteFromDocument(); 
    var el = document.createElement("new_update"); 
    el.setAttribute('id', 'CuniqueId'); 
    el.appendChild(document.createTextNode(text)); //Not sure if this is right 
    el.innerHTML = htmlcontent; 
    range.insertNode(el); 
    rangy.getSelection().setSingleRange(range); 
} 
alert(document.getElementById('Filearea').innerHTML); 
} 

new_update要素は必須ではありませんが、この段階で機能します。またinnerHTMLの代わりにdocument.createDocumentFragment()を使用できますか?次に、その場所にどのように挿入しますか?

答えて

1

getFirstRange()rangy.getSelection().getRangeAt(0)としますか?

1つの問題は、テキストノードが次の行で消去されていることですが、デモページが理想的ではありません。これ以上の問題がない場合、主な問題点は何も言えません。 1つの可能性は、rangedeleteFromDocument()コールによって変更されていることです。 。 `rangy.getSelection()deleteFromDocument()` range.deleteContents() `へ

function updateNodeAtRange(text, frag) { 
    var sel = rangy.getSelection(); 
    if (sel.rangeCount > 0) { 
     var htmlcontent='<span id="AuniqueId" class="style1">' 
      +frag+'</span><span id="BuniqueId" class="style2">' 
      +text+'</span>'; 
     sel.deleteFromDocument(); 
     var el = document.createElement("new_update"); 
     el.setAttribute('id', 'CuniqueId'); 
     el.innerHTML = htmlcontent; 
     var range = sel.getRangeAt(0); 
     range.insertNode(el); 
     sel.setSingleRange(range); 
    } 
    alert(document.getElementById('Filearea').innerHTML); 
} 
+0

は私が変更;'とそれがうまく働いた:私は、ノードを挿入する前に、選択から新しい範囲を取得して助言します。 – Dominic

+0

@Dominic:はい、うまくいくでしょう。 –

関連する問題