替换文本区域内的突出显示文本

时间:2015-01-19 01:40:31

标签: javascript string selection str-replace

这个问题已经有了答案here


我正在寻找一些方法来替换已经定义的新字符串在文本区域内的突出显示文本。

我可以通过以下方式获取文本区域中的所有内容:

var all_text = document.activeElement.value;

我可以通过以下方式获得突出显示的文字:

var selected_text = window.getSelection().toString();

但如何用新字符串替换所选文字?

我在这个网站上看到了很多相关的问题,但到目前为止我看到的每个解决方案只是说使用str.replace()

我不想简单地使用str.replace()因为如果文本区域中包含多个 selected_text 的实例,它可能导致不良行为。

enter image description here

我需要使用额外的测试条件来补充函数,以确保只替换所选文本,而不是其他字符串恰好等同于toString()值。

我认为我可以使用anchorOffest对象的selection属性,但该属性似乎不适用于chrome。事实上,大多数selection属性似乎都不起作用。

1 个答案:

答案 0 :(得分:0)

如果selected_text有本地范围,你真的不必担心
创建多个实例,因为js垃圾收集器将完成这项工作。
如果selected_text具有全局范围,则它是单例。
但是..如果您真的非常关心创建多个实例,只需将您的值保存到文本标记属性中 我不确定你的代码是如何工作的,但下面是我的建议。

var text = document.getElementById("text");
text.setAttribute("selected_text", false);
text.addEventListener("keyup", function(){
    var all_text = document.activeElement.value;
    this.setAttribute("selected_text", window.getSelection().toString());
    //if you need to send highlighted value
    var txt = this.getAttribute("selected_text");
    sendHightlightedTxt(txt);
});