JavaScript 如何从选定的文本中提取链接

标签 javascript getselection

我正在寻找如何使用 window.getSelectiondocument.selection 从所选文本中提取 url 的解决方案。

要选择的文本看起来:

<p>Lorem Ipsum is <a href="http://example.com">simply <b>dummy</b> text</a> of the printing and typesetting industry.</p>

要提取链接的选定文本(由用户选择):

选项 1(包括标签之间的文本和文本):

Ipsum is simply dummy text of

选项 2(选择文本和链接片段):

Ipsum is simply

函数应该返回http://example.com

最佳答案

跨浏览器功能很难写。参见 How to bind a handler to a selection change on window? .

我们应该捕获一些事件,如mousedownmouseuptouchstarttouchend。这些事件的组合可能没问题。

function addEvent(elem, event, func) {
    if (elem.addEventListener) {
        elem.addEventListener(event, func, false);
    } else {
        elem.attachEvent('on' + event, func);
    }
}

接下来是使用 window.getSelectiondocument.selectiongetSelectedHTML()

function getSelectedHTML(event) {
    // http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/ranges.html
    var range = window.getSelection ? window.getSelection()  /* W3C */
    : document.getSelection ? document.getSelection() /* redundant? */
    : document.selection ? document.selection.createRange()   /* IE */
    : null;

    if (range) {
        if (range.getRangeAt) {
            range = range.getRangeAt(0);
        } else if (range.setStart) { // Safari 1.3
            // Create range by itself
            range.setStart(range.anchorNode, range.anchorOffset);
            range.setEnd(range.focusNode, range.focusOffset);
        } else {
            // IE is already reange
        }

        var html = null, link = null;
        if (range.cloneContents) {
            var dummy = document.createElement('div');
            dummy.appendChild(range.cloneContents());
            html = dummy.innerHTML;
        } else {
            html = range.htmlText; /* IE */
        }

        if (html) {
            link = html.match(/<a.*?href\s*?=['"](.*?)['"]/);
            return link ? link[1] : null;
        }
    }

    return null;
}

应该检查此代码,尤其是在使用旧浏览器时。

这是示例 fiddle :http://jsfiddle.net/tokkonoPapa/CQ63a/

关于JavaScript 如何从选定的文本中提取链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18418533/

相关文章:

javascript - foreach 循环中的未定义值

javascript - getSelection 不会在自定义文本输入中为我找到选定的文本

Javascript 函数返回函数代码行或 "{[native code]},"我做错了什么?

javascript - 如何选择以前的元素,直到用 JQ 指定?

JavaScript 测验使用 onClick 函数进行验证?

reactjs - document.getSelection在reactjs环境下如何工作?

javascript - 如何支持跨浏览器多选文本?

javascript - 将 window.getSelection().extentOffset 引用到某个 HTML 元素

javascript - 如何在 Angular.js 中执行验证

javascript - Bing map 在多边形上尝试 PixelToLocation