获取突出显示/选定的文本

IT技术 javascript jquery textselection
2021-01-18 01:18:06

是否可以通过使用 jQuery 来获取网站段落中突出显示的文本?

6个回答

获取用户选择的文本相对简单。使用 jQuery 没有任何好处,因为您只需要windowdocument对象。

function getSelectionText() {
    var text = "";
    if (window.getSelection) {
        text = window.getSelection().toString();
    } else if (document.selection && document.selection.type != "Control") {
        text = document.selection.createRange().text;
    }
    return text;
}

如果您对同时处理<textarea>文本<input>元素中的选择的实现感兴趣,您可以使用以下内容。由于现在是 2016 年,我省略了 IE <= 8 支持所需的代码,但我已经在 SO 上的许多地方发布了相关内容。

function getSelectionText() {
    var text = "";
    var activeEl = document.activeElement;
    var activeElTagName = activeEl ? activeEl.tagName.toLowerCase() : null;
    if (
      (activeElTagName == "textarea") || (activeElTagName == "input" &&
      /^(?:text|search|password|tel|url)$/i.test(activeEl.type)) &&
      (typeof activeEl.selectionStart == "number")
    ) {
        text = activeEl.value.slice(activeEl.selectionStart, activeEl.selectionEnd);
    } else if (window.getSelection) {
        text = window.getSelection().toString();
    }
    return text;
}

document.onmouseup = document.onkeyup = document.onselectionchange = function() {
  document.getElementById("sel").value = getSelectionText();
};
Selection:
<br>
<textarea id="sel" rows="3" cols="50"></textarea>
<p>Please select some text.</p>
<input value="Some text in a text input">
<br>
<input type="search" value="Some text in a search input">
<br>
<input type="tel" value="4872349749823">
<br>
<textarea>Some text in a textarea</textarea>

@TimDown 曾经说过“jQuery 没有 X”是非常薄的冰,因为当然,使用正确的插件,它可以使用 javascript 在浏览器中执行您可以执行的任何操作。在这种情况下,我们有 jquery.selection ( madapaja.github.io/jquery.selection )。说“也不应该”同样是错误的。我来到这里是因为我正在寻找这个。我有一个用例,jQuery 是正确的解决方案。
2021-03-14 01:18:06
@Dan:对不起,我错过了这个问题(不要以为这样提醒我)。第二个分支用于 IE <= 8(IE 9 实现window.getSelection())。document.selection.type检查正在测试选择的是文本的选择,而不是控制选择。在 IE 中,控件选择是在包含一个或多个具有轮廓和调整大小手柄的元素(例如图像和表单控件)的可编辑元素内的选择。如果您调用.createRange()这样的选择,您将得到 aControlRange而不是 a TextRange,并且ControlRanges 没有text属性。
2021-03-16 01:18:06
@Auspex:我有点明白你的意思,但我不同意。jQuery 插件是一个依赖于 jQuery 的库;它本身不是 jQuery。在选择处理的情况下,jQuery 本身没有提供任何东西(这是应该的,因为选择处理不是 jQuery 的用途),因此任何使用 jQuery 的解决方案都是偶然使用它的。
2021-03-20 01:18:06
我已经知道您知道以下内容,@TimDown,但应该注意的是,这不适textarea用于 Firefox 中的 s。这是一个已知的错误
2021-03-20 01:18:06
else if {} -fork 有什么用?“控制”是什么?
2021-04-04 01:18:06

以这种方式获取突出显示的文本:

window.getSelection().toString()

当然还有一个特殊的待遇,即:

document.selection.createRange().htmlText
这将在各种浏览器(例如 Firefox)的多种条件下失败。
2021-03-23 01:18:06
2020 年 8 月值得注意的是,目前getSelection()不适用于 Firefox、Edge(旧版)和 Internet Explorer 中的内容<textarea><input>元素。HTMLInputElement.setSelectionRange()或者可以使用 selectionStart 和 selectionEnd 属性来解决这个问题。
2021-03-26 01:18:06
对于 IE>=10 “document.selection 支持在 IE10 中被删除并替换为 window.getSelection”。来源:connect.microsoft.com/IE/feedback/details/795325/...
2021-04-07 01:18:06

如果您使用的是 chrome(无法验证其他浏览器)并且文本位于同一个 DOM 元素中,则此解决方案有效:

window.getSelection().anchorNode.textContent.substring(
  window.getSelection().extentOffset, 
  window.getSelection().anchorOffset)

使用window.getSelection().toString().

您可以在developer.mozilla.org上阅读更多内容

虽然是真的,但这与旧答案有什么不同?(对此的其他答案的评论并不总是有效,也适用于此处。)
2021-04-06 01:18:06

是的,您可以使用简单的 JavaScript 代码段来实现:

document.addEventListener('mouseup', event => {  
    if(window.getSelection().toString().length){
       let exactText = window.getSelection().toString();        
    }
}