2011-09-13 9 views
3

IEで動作するJavascriptをいくつかアップグレードしています。しかし、私はいくつか問題があります。カーソルがあるところにテキストを挿入するにはどうすればよいですか?

HERESにIEコード:

var range = document.getElementById('text').contentWindow.window 
       .document.getElementById('Content').createTextRange(); 
var textObj = document.getElementById('text').contentWindow.window 
       .document.getElementById('Content'); 

var textFieldValue = theSmile; 
if (range && textObj.CursorPos) { 
    var CursorPos = textObj.CursorPos; 
    CursorPos.text = CursorPos.text.charAt(CursorPos.text.length - 1) 
           == ' ' ?' ' + textFieldValue : textFieldValue; 
} else { 
    textObj.value = textFieldValue; 
} 

私はIE以外のブラウザ用のCreateRangeCreateTextRangeを交換しようとしたが、これは役立ちません。

var range; 
var textObj; 
var iframeEl = document.getElementById('text'); 
if (iframeEl.contentDocument) { // DOM 
    range = iframeEl.contentDocument.getElementById('Content').createRange; 
    textObj= iframeEl.contentDocument.getElementById('Content'); 
} else if (iframeEl.contentWindow) { // IE win 
    range = iframeEl.contentWindow.document.getElementById('Content') 
                  .createTextRange; 
    textObj= iframeEl.contentWindow.document.getElementById('Content'); 
} 

答えて

9

ここには、テキストエリアやテキスト入力のカーソルにテキストを挿入する機能があります。これは、すべての主要なブラウザで動作します:

function insertTextAtCursor(el, text) { 
    var val = el.value, endIndex, range, doc = el.ownerDocument; 
    if (typeof el.selectionStart == "number" 
      && typeof el.selectionEnd == "number") { 
     endIndex = el.selectionEnd; 
     el.value = val.slice(0, endIndex) + text + val.slice(endIndex); 
     el.selectionStart = el.selectionEnd = endIndex + text.length; 
    } else if (doc.selection != "undefined" && doc.selection.createRange) { 
     el.focus(); 
     range = doc.selection.createRange(); 
     range.collapse(false); 
     range.text = text; 
     range.select(); 
    } 
} 

次のようにあなたがそれを使用することができます:

var iframeWin = document.getElementById('text').contentWindow; 
var textObj = iframeWin.document.getElementById('Content'); 

insertTextAtCursor(textObj, "foo"); 
関連する問題