我在使用預定義替換文本替換textarea中的選定文本時出現問題。JavaScript:當文本位於文本區域內時,選定的文本不會被替換
要替換文本,我必須選擇它並右鍵單擊。
如果文本位於<div>
或<p>
標記內,替換就會正常進行。但是,如果文本在<textarea>
之內,則不會被正確替換。
的樣本可在此Fiddle
這裏是我的代碼:
HTML:
<p> Select any text in this sentence and right click to replace it </p>
<div>
<textarea name = "intro" rows = "5" cols = "80">This text is not getting replaced as expected
</textarea>
</div>
JS:
if (document.addEventListener) {
document.addEventListener('contextmenu', function(e) {
replaceSelectedText("<<replaced>>");
e.preventDefault();
}, false);
} else {
document.attachEvent('oncontextmenu', function() {
alert("You've tried to open context menu");
window.event.returnValue = false;
});
}
function replaceSelectedText(replacementTxt) {
var sel, range;
if (window.getSelection) {
sel = window.getSelection();
console.log(sel);
if (sel.rangeCount) {
range = sel.getRangeAt(0);
console.log(range);
range.deleteContents();
range.insertNode(document.createTextNode(replacementTxt));
}
} else if (document.selection && document.selection.createRange) {
console.log("!!")
range = document.selection.createRange();
range.text = replacementTxt;
}
}
我實施它的方式有什麼問題嗎?
任何建議,將不勝感激。
仍在調查,但我相信,我知道這個問題的一部分。看起來當你右鍵點擊時,它不是選擇'textarea',而是最終選擇父div。不知道這是否有助於你更多地移動。 – aug 2014-12-08 07:32:29
我正在努力..謝謝你的信息.. – VSri58 2014-12-08 07:34:33
啊我發現了這個問題。 [這是一個相關的問題。](http://stackoverflow.com/questions/19953220/use-window-getselection-get-selected-or-cursor-located-text-line-from-textarea)顯然textarea使用不同的選擇API,所以你必須使用selectionStart和selectionEnd屬性。希望幫助更多。 – aug 2014-12-08 07:41:22