【问题标题】:Replacing highlighted text inside a text area替换文本区域内突出显示的文本
【发布时间】:2015-01-19 01:40:30
【问题描述】:

这个问题已经有了答案here


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

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

var all_text = document.activeElement.value;

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

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

但是如何用新字符串替换选中的文本呢?

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

我不想简单地使用str.replace(),因为如果有多个 selected_text 包含在文本区域内,可能会导致不受欢迎行为。

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

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

【问题讨论】:

  • 显示你的代码...没有你的代码..很难猜出你真正想要什么
  • @SehoLee 如果你再读一遍应该已经很清楚我想要什么了
  • 链接的答案到底有什么问题?
  • @Rhumborl 它没有替换选定的文本,但它没有给我任何错误消息,所以我现在不确定

标签: javascript string selection str-replace


【解决方案1】:

如果 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);
});

【讨论】:

    猜你喜欢
    • 2010-09-13
    • 2011-01-06
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    相关资源
    最近更新 更多