选择文本并更新他

时间:2014-03-03 21:19:29

标签: javascript jquery

我在带有按钮的textarea中有一个非常大的文本,我想要做的就是:

1 - 单击此按钮后,自动获取用户使用鼠标选择的文本的jquery部分,并在此textarea中的文本周围创建2个标签

示例:

文字区域中的现有文字:

  

Lorem Ipsum只是打印和排版的虚拟文本   行业。 Lorem Ipsum一直是业界标准的虚拟文本   自从16世纪以来,当一个未知的打印机采取类型的厨房   然后把它拼凑成一本样本书。它没有幸存下来   只有五个世纪,但也是电子排版的飞跃,   保持基本不变。它在20世纪60年代随着推广而普及   释放包含Lorem Ipsum段落的Letraset表格,以及   最近使用像Aldus PageMaker这样的桌面出版软件   包括Lorem Ipsum的版本。

鼠标选择的文字:

  

1500s,当一个未知的打印机拿了一个类型的厨房并乱扰它   制作一本样本书。它不仅存活了五个世纪   ,也是电子排版的飞跃,

点击按钮后会发生什么:

  

Lorem Ipsum只是打印和排版的虚拟文本   行业。 Lorem Ipsum一直是业界标准的虚拟文本   自 [INFO] 1500s以来,当一台未知的打印机采用了类型的厨房时   然后把它拼凑成一本样本书。它没有幸存下来   只有五个世纪,也是电子化的飞跃   排版,[/ INFO] 基本保持不变。它是   随着Letraset床单的发布,在20世纪60年代普及   包含Lorem Ipsum段落,最近还有桌面版   像Aldus PageMaker这样的出版软件,包括Lorem的版本   存有。

我没有尝试任何东西,但我不知道是谁选择了所选文本,并将他更新到textarea。

1 个答案:

答案 0 :(得分:2)

虽然您可以使用类似jQuery的replace()函数,但这只会替换您突出显示的内容的第一个实例,而不是实际突出显示的内容。您可以通过获取选择的边界来解决此问题,然后相应地拆分字符串:

$("button").click(function () {
    var selection = window.getSelection(),
        text = "[INFO]" + selection + "[/INFO]",
        content = $("div").text(),
        range = selection.getRangeAt(0),
        startText = content.substring(0, range.startOffset), // cut from 0 to beginning of highlight
        endText = content.substring(range.endOffset, content.length); // cut from end of highlight to end of text
    $("div").html(startText + text + endText);
});

但有时会变得更复杂,as I've previously discussed at length

Example