如何在textarea中获取选定的文本? [复制]

Posted

技术标签:

【中文标题】如何在textarea中获取选定的文本? [复制]【英文标题】:How to get selected text in textarea? [duplicate] 【发布时间】:2010-10-17 13:30:50 【问题描述】:

我正在尝试制作自己的 WYSIWYG 编辑器。有什么办法,如何获取用户在 textarea 中选择的文本?

例如,如果用户选择了某个单词然后单击按钮,我如何找出选择了哪个文本?

我正在使用 jQuery

【问题讨论】:

看看这个问题:***.com/questions/401593/… 【参考方案1】:

试试 jquery-fieldselection 插件。

您可以从here 下载它。也有例子。

【讨论】:

在 Internet Explorer 7 中不适合我。 该插件中的函数replaceSelection 在 Chrome 和 Firefox 中对我不起作用。【参考方案2】:

getSelection()

这会因浏览器而有所不同,请参阅此处了解据称在大多数情况下都可以使用的功能: http://snipplr.com/view/775/getselection/

【讨论】:

如何在特定的textarea 元素上使用此功能? 以上代码在火狐浏览器(61.0.1)中不起作用@tpdi【参考方案3】:

不同浏览器的处理选择不同:

var userSelection;
if (window.getSelection) 
    userSelection = window.getSelection();

else if (document.selection)  // Opera
    userSelection = document.selection.createRange();

这给了你一个范围对象。每个范围代表一个选择(使用控制/命令键可以进行多个活动选择)。

您现在拥有的范围对象类型取决于浏览器。对于 IE,它是一个 Text Range 对象;对于其他人,它是一个选择对象。要将 Selection 对象转换为文本范围,可以调用 getRangeAt;对于 Safari,您需要构建:

var range;
if (userSelection.getRangeAt)
    range = userSelection.getRangeAt(0);
else  // Safari
    range = document.createRange();
    range.setStart(userSelection .anchorNode, userSelection.anchorOffset);
    range.setEnd(userSelection.focusNode, userSelection.focusOffset);

范围对象为您提供选择的开始和结束 dom 元素以及文本偏移量。

有关范围对象的更多信息,请访问quirksmode.org here

如果您使用的是 jQuery,您可能需要查看 Batiste Bieler 的 light weight jQuery RTE Plugin。它可能足以满足您的需求,或者至少可以为您提供一些帮助。

【讨论】:

非常有用且内容丰富的答案。【参考方案4】:

window.getSelection().toString() 为我使用 Chrome,但 not Firefox。

使用 Firefox 获取 <textarea> 中的选定内容:

function getSel() // javascript

    // obtain the object reference for the <textarea>
    var txtarea = document.getElementById("mytextarea");
    // obtain the index of the first selected character
    var start = txtarea.selectionStart;
    // obtain the index of the last selected character
    var finish = txtarea.selectionEnd;
    // obtain the selected text
    var sel = txtarea.value.substring(start, finish);
    // do something with the selected content

您也可以使用activeElement 代替getElementById。

参考:

textarea document

【讨论】:

window.getSelection().toString() 做同样的事情,你不需要知道 textarea 的 id。您不能同时在不同的文本区域中进行多项选择。 @DanDascalescu 我之前和现在都试过了。它适用于 Chrome,但似乎不适用于 FireFox。 正确 - 原来 there is a Firefox bug filed in 2001 关于 window.getSelection() 在 textareas 中不起作用! 确实,Firefox 中存在一个错误,该错误早在 2001 年就已提交(!)。我在my answer 中提到过。【参考方案5】:

一个小函数,它将获取文本区域或输入元素的选定字符串/文本:

function getInputSelection(elem)
 if(typeof elem != "undefined")
  s=elem[0].selectionStart;
  e=elem[0].selectionEnd;
  return elem.val().substring(s, e);
 else
  return '';
 

请注意,上面的代码需要 jQuery 才能工作。获取id为abc123

的输入元素的选定字符串的示例
getInputSelection($("#abc123"));

上述函数将返回选定的字符串。如果用户没有选择字符串,则返回null

更多示例

getInputSelection($("body").find("input[name=user]"));

在使用类名选择的元素上,返回元素数组的第一个元素的选定字符串,而不是所有元素的选定字符串。毕竟,页面中的选择总是1

【讨论】:

请举个例子。 我喜欢将任何元素传递给你的函数的能力,它使它更便携/可重用。【参考方案6】:
function getSel() 
var input = $("#text");
return input.html().toString().substring(getSelection().baseOffset,getSelection().extendOffset);

【讨论】:

此代码不正确。确实它给了我整个文本区域而不是选定的文本。

以上是关于如何在textarea中获取选定的文本? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Internet Explorer 7 中使用 jQuery 获取 textarea 中的选定文本?

如何通过javascript获取textarea元素内的选定文本?

如何从 textarea 中获取突出显示的文本位置?

如何在textarea中的选定文本下方显示一个div?

如何从 jquery 的文本区域中获取选定的文本? [复制]

如何获取下拉列表的选定值的文本? [复制]