Javascript Ckeditor查找并选择文本

Javascript Ckeditor查找并选择文本,javascript,ckeditor,Javascript,Ckeditor,我想做的是在单词上创建一个选择(类似于chrome上的CTRL+F) 我在这一点上 var editor = CKEDITOR.instances.editor1; var sel = editor.getSelection(); var element = sel.getStartElement(); var find = '[valor]'; var ranges = editor.getSelection().getRanges(); var startIndex = element.ge

我想做的是在单词上创建一个选择(类似于chrome上的CTRL+F)

我在这一点上

var editor = CKEDITOR.instances.editor1;
var sel = editor.getSelection();
var element = sel.getStartElement();
var find = '[valor]';
var ranges = editor.getSelection().getRanges();
var startIndex = element.getHtml().indexOf(find);
if (startIndex != -1) {
    ranges[0].setStart(element.getFirst(), startIndex);
    ranges[0].setEnd(element.getFirst(), startIndex + find.length);
    sel.selectRanges([ranges[0]]);
}


这很好,它只有一个问题。它只选择我所在行上的文本,我希望它找到所有ckeditor文本的第一个匹配项。最后,我可以解决这个问题,我需要做的就是从编辑器中获取所有textnodes,然后搜索节点上的单词,并将它们放入如下数组:

for ( i = textNodes.length; i--; ) {
text = textNodes[ i ];
index = text.getText().toLowerCase().indexOf( wordtosearch );

if ( index > -1 ) {

while (index > -1) {

    range = editor.createRange();
    range.setStart( text, index );
    range.setEnd( text, index + wordtosearch.length); 
    ranges.push( range );

    index= text.getText().indexOf( wordtosearch , index+wordtosearch.length );
}
}

}

最后,我可以解决这个问题,我需要做的就是从编辑器中获取所有textnodes,然后搜索节点上的单词,并将它们放入如下数组:

for ( i = textNodes.length; i--; ) {
text = textNodes[ i ];
index = text.getText().toLowerCase().indexOf( wordtosearch );

if ( index > -1 ) {

while (index > -1) {

    range = editor.createRange();
    range.setStart( text, index );
    range.setEnd( text, index + wordtosearch.length); 
    ranges.push( range );

    index= text.getText().indexOf( wordtosearch , index+wordtosearch.length );
}
}

}

您在这里只找到一次元素.getHtml().indexOf(find);要查找所有出现的情况,这必须在一个循环中,indexOf()应采用另一个参数,该参数将是上一个索引。我只想查找第一个,问题是,只有当我将焦点放在包含该单词的节点上时,它才起作用,idk如何获取所有文本节点?问:你想在选定的文本范围内找到第一个出现的文本,其中选择跨越到不同的文本节点吗?是的,我想找到并选择ckeditor所有文本上的第一个出现的文本,并且ckeditor将不同节点中的每一行都分割,我有我的问题,这段代码只在im当前所在的行(具有焦点的节点)上找到文本,您在这里只找到一次element.getHtml().indexOf(find);要查找所有出现的情况,这必须在一个循环中,indexOf()应采用另一个参数,该参数将是上一个索引。我只想查找第一个,问题是,只有当我将焦点放在包含该单词的节点上时,它才起作用,idk如何获取所有文本节点?问:你想在选定的文本范围内找到第一个出现的文本,其中选择跨越到不同的文本节点吗?是的,我想找到并选择ckeditor所有文本上的第一个出现的文本,并且ckeditor将不同节点中的每一行都分割,我有我的问题,该代码仅在im当前所在的行(具有焦点的节点)上查找文本