如何在多个HTML元素上获取选择的文本?

时间:2011-06-24 18:00:26

标签: javascript html html5 selection

这是我的问题:

当用户在WYSWYG编辑器小部件的文章或编辑区域中进行选择时, 选择可以跨越多个元素, 像锚点,图像,跨度标签......甚至是块级元素(但在我的问题中没有表格)。

我知道如何从选择中检索Range对象, 但找不到可靠的解决方案来获取Range对象的内容文本。

我不是在寻找IE的解决方案(其TextRange对象具有.text属性)。

谢谢!

2 个答案:

答案 0 :(得分:4)

您是否看过关于Range的quirksmode文章?

根据这篇文章,您可以创建一个这样的方法:

function getRangeText() {

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

我在FF5,Opera 11,Mac上的Safari以及IE6和IE7上进行了测试。它值得在其他IE浏览器中进行测试,但我的猜测也适用于它们。

答案 1 :(得分:2)

这将返回一个字符串,适用于所有主流浏览器:

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