我在使用预定义替换文本替换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