14

我想在基于浏览器的应用程序中做的一件事是允许用户选择一些文本(不是在 <textarea> 中,只是纯文本!),然后让我的应用程序弹出一个小工具栏然后可以与下一个交互(在我的例子中,添加注释)。

我在谷歌上找到了很多似乎专注于编写所见即所得编辑器的东西,但这不是我想要的,而且大部分都在 IE 中工作,但在 FF2 或 3 中没有。理想情况下,我想要一些可以在IE7(和 6,如果可能)、FireFox 2 & 3 和 Safari 2中工作的浏览器窗口中返回当前选定文本的函数。如果它在 Opera 中工作,那将是一个奖励,但这不是必需的。

任何人都有这样做的功能?或者知道从哪里开始?

4

6 回答 6

17

那个 jQuery 插件很酷,但它完成了一项非常具体的任务:用标签包裹你突出显示的文本。这可能正是您想要的。但是,如果您不想(或处于无法)向页面添加任何无关标记,则可以尝试以下解决方案:

function getSelectedText() {
  var txt = '';

  if (window.getSelection) {
    txt = window.getSelection();
  }
  else if (document.getSelection) {
    txt = document.getSelection();
  }
  else if (document.selection) {
    txt = document.selection.createRange().text;
  }
  else return; 

  return txt;
}

此函数返回一个表示文本选择的对象。它可以跨浏览器工作(尽管我怀疑它返回的对象会因浏览器而略有不同,并且仅对结果的实际文本而不是任何附加属性可靠)。

注意:我最初在这里发现了该代码片段:http: //www.codetoad.com/javascript_get_selected_text.asp

于 2008-10-04T06:41:01.140 回答
8

看看jQuerywrapSelection 插件。这可能是您正在寻找的东西。

于 2008-08-13T23:52:35.400 回答
1

Range 简介有一些关于不同浏览器如何让您访问文本选择的详细信息。

我的经验是,直接使用这些不同的 API 非常笨拙,所以如果wrapSelection对你有用,我会选择它。

于 2008-08-17T20:21:46.323 回答
1

这些天这种方法应该足够了

function getSelectedText() {
    return window.getSelection ? window.getSelection().toString() : '';
}

它会''在极少数情况下在真正旧的浏览器中返回,并且可能是在 Opera Mini 的情况下(尽管有待测试,这可能已经过时)+ 请参阅 Android 版 UC 浏览器的说明。

于 2019-01-04T12:38:59.487 回答
-2

此处概述了各个浏览器在选择方面的行为。

于 2008-08-17T20:25:28.047 回答
-3

此代码适用于 Safari、IE 和 Firefox - 希望对您有所帮助

var str = (window.getSelection) ? window.getSelection() : document.selection.createRange();
str = str.text || str;
str = str + ''; // the best way to make object a string...
于 2008-08-17T20:35:22.440 回答