突出显示包括不同的节点

时间:2014-11-11 08:12:17

标签: javascript html

编辑:我在这篇文章中发现了一个很好的解决方案Remove highlight added to selected text using JavaScript?

我正在编写一个脚本来突出显示文本。我正在使用<span>标签。这部分很简单,但现在我遇到了一个问题。当突出显示包含不同的节点时,我需要在父关闭之前关闭<span>标记,然后在新节点中再次打开de <span>。这不是一个很好的解释所以我举了一个例子:

    <body>

       <p id="0">Lorem ipsum</p>

       <div id="1">dolor sit amet</div>

    </body>

我选择突出显示:

ipsum</p><div id="1">dolor sit

然后我必须在<span>之前关闭</p>,然后以编程方式在<div>之后打开。任何想法我该怎么办?我更喜欢使用纯JavaScript来完成所有脚本,但是我们将不胜感激。

这是我强调的功能:

function surroundSelection(element) {



            if (window.getSelection)
            {
                var sel = window.getSelection();
                if (sel.rangeCount)
                {
                    console.log (sel);

                    var range = sel.getRangeAt(0).cloneRange();



                    range.surroundContents(element);
                    sel.removeAllRanges();
                    sel.addRange(range);



                }
            }
        }

其中元素将是标记(在我的情况下为<span>

这就是我所拥有的,仍然存在突出显示不同节点的问题 http://jsfiddle.net/nacles/4L6d57bs/

1 个答案:

答案 0 :(得分:0)

在您的示例中,您必须在代码的每个部分上启动不同的spam

<span>ipsum</span></p><div id="1"><span>dolor sit</span>

所以对你来说,只需在开头放一个span,然后寻找字符串的结尾或者&#39;&lt;&#39;如果标签像

那样打开,那么请注意有一个嵌套的标签块,如果标签是接近的,那么你只需要一个结束范围。

有很多案例,但我认为并不是很困难。