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

2022-08-29 23:23:53

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


答案 1

获取用户选择的文本相对简单。参与 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;
}

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

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>

答案 2

通过以下方式获取突出显示的文本:

window.getSelection().toString()

当然还有特殊待遇,即:

document.selection.createRange().htmlText