兰吉:如何获得使用荧光笔模块创建的span元素?

mus*_*fan 4 javascript rangy

我正在使用Rangy中可用的荧光笔模块,它在为所选文本创建突出显示时效果很好。

就html的更改而言,所选文本将由span标记代替,例如以下所示:

the selected text is <span class="highlight">replaced by a span tag</span> like the
Run Code Online (Sandbox Code Playgroud)

我想做的是在创建span元素后获得对它的引用,以便我可以对其进行其他处理。如何才能做到这一点?

请注意,在其他地方可能存在其他带有或没有高亮标记的跨度,因此无法使用这些跨度来找到它。

我必须为所选文本创建突出显示的代码的重要部分是:

var highlighter = null;
var cssApplier = null;

rangy.init();
cssApplier = rangy.createCssClassApplier("highlight", { normalize: true });
highlighter = rangy.createHighlighter(document, "TextRange");
highlighter.addClassApplier(cssApplier);

var selection = rangy.getSelection();
highlighter.highlightSelection("highlight", selection);
Run Code Online (Sandbox Code Playgroud)

mus*_*fan 5

我在等待@TimDown用工作代码更新他的答案。但是由于他还没有这样做,所以我会发表一些自己的看法(基于他的回答)。

假设选择仍然有效,以下函数将返回已创建的高亮元素数组:

function GetAllCreatedElements(selection) {
    var nodes = selection.getRangeAt(0).getNodes(false, function (el) {
        return el.parentNode && el.parentNode.className == "highlight";
    });

    var spans = [];

    for (var i = 0; i < nodes.length; i++) {
        spans.push(nodes[i].parentNode);
    }
    return spans;
}
Run Code Online (Sandbox Code Playgroud)

  • 我要在荧光笔模块中添加一些东西。可以的话,我会再寄回这里。 (2认同)