使用javascript抓取选区周围的单词和同一<p>元素的一部分?</p>

时间:2011-02-13 19:59:02

标签: javascript dom string bookmarklet

我希望创建一个bookmarklet,它将选定的单词和同一段落元素中的其他单词进行编码,然后将它们发送到我的服务器。

例如,请考虑以下事项:

<p>The quick brown fox jumped over the fence.</p>

如果用户选择&#34;跳过&#34; (通过突出显示它)并点击书签,我想发送&#34;跳过&#34;作为一个编码的字符串和&#34;快速的棕色狐狸跳过栅栏&#34;作为附加编码字符串。

这是我迄今为止所得到的。 getSelection函数发送&#34; jumped&#34;我的服务:

javascript:location.href='http://www.myservice.com/new.php?'+'url_def='+encodeURIComponent(getSelection())

为了将段落元素中的其他文本添加到我的服务中,我可以添加哪些内容?

2 个答案:

答案 0 :(得分:3)

你所拥有的东西在IE中不起作用,它有一种不同的机制来获取选择。如果你想要的是包含整个选择的元素的文本,你可以做这样的事情,这将适用于所有主流浏览器。

示例:http://jsfiddle.net/timdown/X7n5R/

代码:

function getSelectedText() {
    var selectedText = "", containerText = "";
    if (typeof window.getSelection != "undefined") {
        var sel = window.getSelection();
        if (sel.rangeCount) {
            var range = sel.getRangeAt(0);
            selectedText = range.toString();
            var container = range.commonAncestorContainer;
            if (container.nodeType == 3) {
                container = container.parentNode;
            }
            containerText = container.textContent;
        }
    } else if (typeof document.selection != "undefined" && document.selection.type != "Control") {
        var textRange = document.selection.createRange();
        selectedText = textRange.text;
        containerText = textRange.parentElement().innerText;
    }
    return {
        selectedText: selectedText,
        containerText: containerText
    };
}

答案 1 :(得分:1)

您可以使用document.getSelection()并检查anchorNode以查看已选择<p>

所以这会引用“周围文本”:document.getSelection().anchorNode.parentNode.innerHTML