getSelection()只能应用于某个元素(而不是整个文档)

Can getSelection() be applied to just a certain element (not the whole document)?

本文关键字:文档 应用于 getSelection 元素      更新时间:2023-09-26

我正在测试getSelection()方法,我希望我的程序在某段文本中获得选定的文本,并将其显示在div标记中。我使用了以下代码:

var txt = document.getSelection();
document.getElementById("display").innerHTML = "The text you have selected is: " + txt + ".";

但是,我希望程序只在段落本身进行选择,而不是在整个文档中进行选择。我尝试使用document.getElementById("id").getSelection();,但没有成功。

如何使getSelection()仅适用于某个元素?

这里有一种方法,仅在Chromium 19中测试(它支持textContent,对于Internet Explorer,必须使用innerText):

function getSelectedText() {
    if (window.getSelection) {
        return window.getSelection().toString();
    } else if (document.selection) {
        return document.selection.createRange().text;
    }
    return '';
}
var b = document.getElementsByTagName('body')[0],
    o = document.getElementById('output');
b.onmouseup = function(e){
    var selText = getSelectedText(),
        targetElem = e.target.tagName.toLowerCase();
    if (selText && targetElem == 'p') {
        o.textContent = 'You selected the text: "' + selText + '" from a ' + targetElem + ' element.';
    }
};​

JS Fiddle演示。

getSelection()仅作为windowdocument的方法可用。如果你想得到一个Range,它只代表用户选择中位于特定节点内的部分,这里有一个函数可以使用我的Rangy库来实现这一点(没有库的代码会更长,超出了我现在写的热情):

function getSelectedRangeWithin(el) {
    var selectedRange = null;
    var sel = rangy.getSelection();
    var elRange = rangy.createRange();
    elRange.selectNodeContents(el);
    if (sel.rangeCount) {
        selectedRange = sel.getRangeAt(0).intersection(elRange);
    }
    elRange.detach();
    return selectedRange;
}
function getSelected() {
    if(window.getSelection) { return window.getSelection(); }
        else if(document.getSelection) { return document.getSelection(); }
                    else {
                            var selection = document.selection && document.selection.createRange();
                            if(selection.text) { return selection.text; }
                return false;
            }
            return false;
        }

用咖啡书写:

getSelected = ->
  if window.getSelection
    return window.getSelection()
  else if document.getSelection
    return document.getSelection()
  else
    selection = document.selection and document.selection.createRange()
    return selection.text  if selection.text
    return false
  false

美味的javascript