Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:获取关于用户选择的html?_Javascript_Html_Wysiwyg_Selection - Fatal编程技术网

Javascript:获取关于用户选择的html?

Javascript:获取关于用户选择的html?,javascript,html,wysiwyg,selection,Javascript,Html,Wysiwyg,Selection,可以使用Javascript通过鼠标获得用户选择的任何内容,如下所示: 我的问题是,我不仅需要这篇文章,还需要: 获取围绕此文本的html(例如,如果用户选择“hello”,并且此hello在源代码中生成为:“hello”,则应返回此内容) 对图形执行相同的操作 有人能指导我完成这个过程吗?如果不可能,还有其他方法吗?这将在所有主要浏览器中完成。IE和更多符合标准的浏览器有单独的分支。在IE中,这稍微容易一些,因为从选择创建的专有TextRange对象有一个方便的htmlText属性。在其他浏览

可以使用Javascript通过鼠标获得用户选择的任何内容,如下所示:

我的问题是,我不仅需要这篇文章,还需要:

  • 获取围绕此文本的html(例如,如果用户选择“hello”,并且此hello在源代码中生成为:“
    hello
    ”,则应返回此内容)

  • 对图形执行相同的操作


  • 有人能指导我完成这个过程吗?如果不可能,还有其他方法吗?

    这将在所有主要浏览器中完成。IE和更多符合标准的浏览器有单独的分支。在IE中,这稍微容易一些,因为从选择创建的专有
    TextRange
    对象有一个方便的
    htmlText
    属性。在其他浏览器中,您必须使用DOM Range的
    cloneContents()
    方法创建一个
    DocumentFragment
    ,其中包含所选内容的副本,并通过将片段附加到元素并返回元素的
    innerHTML
    属性,从中获取HTML

    function getSelectionHtml() {
        var html = "";
        if (typeof window.getSelection != "undefined") {
            var sel = window.getSelection();
            if (sel.rangeCount) {
                var container = document.createElement("div");
                for (var i = 0, len = sel.rangeCount; i < len; ++i) {
                    container.appendChild(sel.getRangeAt(i).cloneContents());
                }
                html = container.innerHTML;
            }
        } else if (typeof document.selection != "undefined") {
            if (document.selection.type == "Text") {
                html = document.selection.createRange().htmlText;
            }
        }
        return html;
    }
    
    alert(getSelectionHtml());
    
    函数getSelectionHtml(){ var html=“”; if(typeof window.getSelection!=“未定义”){ var sel=window.getSelection(); 如果(选择范围计数){ var container=document.createElement(“div”); 对于(变量i=0,len=sel.rangeCount;i谢谢,这似乎很有希望。但是,当我只选择文本时,我通常不会收到包含文本的标记。如果我选择多一点(例如,也选择一些空格),它似乎会返回包含文本的标记。基本上,我只想得到被选中的文本,然后选择我收到的文本上面有多少层。例如,test

    应返回test、test

    或test

    取决于给定的水平(分别为0、1、2)。这有可能吗?@Tom:在诸如
    o|ne

    tw|o

    (管道表示选择边界)这样的情况下,您想做什么?在这里,你有一个选择,它的边界在不同的层次上。很好的评论。想一想,我也许应该重新表述我的问题/需求。我需要的是一个数组,其中html位于选择的左侧,html位于选择的右侧。所以在你的例子中:arr[0]=o,arr[1]=ne

    tw,arr[2]=o

    。另一方面,我在网站上读到,如果你在选择中得到了html的一部分,浏览器会自动添加结束标记,但不确定这是否正确(在所有情况下)。如果上述情况足以让我发布一个新问题并接受这个问题,请告诉我。我能问你为什么需要这个吗?这不是直截了当的,在我看来是不自然的。没错,浏览器确实会返回表示所选内容的有效HTML,以便将其插入文档的其他位置。对于IE,它返回一个字符串,而其他浏览器返回一个
    DocumentFragment
    节点。通常考虑文档中的节点而不是HTML字符串表示来考虑HTML文档的部分。