2

谁能告诉我如何使用 JavaScript 在 CKEditor 实例中搜索特定单词?我有一个名为搜索的按钮和一个文本框。当我在文本框中输入一个单词并按下按钮时,它应该会在编辑器中找到该文本。解决方案只能是 JavaScript。

4

3 回答 3

3

有一个 command find,但是editor.execCommand( 'find' )只会显示 find&replace 对话框,这不会让你满意。

不幸的是,要复制此对话框的行为,您需要编写自己的搜索 impl,因为它背后的逻辑无法从外部访问(这需要http://dev.ckeditor.com上的票证)。您可以find在 _source/plugins/find/dialogs/find.js 中检查插件 impl,但如果没有一些解释,它可能对您没有足够的帮助。

那么你需要做什么?

首先-您需要准确地找到文本节点以及文本的位置-这不是微不足道的:)。您必须从editor.document.getBody()源代码顺序开始然后遍历 DOM 树。有一个工具可以帮助你 - CKEDITOR.dom.walker

其次 - 你需要创建 Range( new CKEDITOR.dom.range( editor.document )) 并设置它的startContainer, startOffset, endContainer, endOffset. 这里有更多关于 W3C 范围的信息 - http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html - CKEDITOR 非常相似 - 你可以在 API 文档中找到更多关于它们的信息(抱歉没有发布链接,但我的声誉很低,我不能:D)。

当您设置范围的开始和结束时,您只需调用range.select(). 如果编辑器被聚焦(你可以通过调用来确保这一点editor.focus())范围将被选中。

于 2012-06-18T23:40:07.300 回答
0

您可以使用 CKEditor 实例从 CKEditor 实例中提取数据instance.GetData()

你如何找到这个词取决于你,如果它很简单,你可以.indexOf()按照@TomTeman 的建议使用,否则你可能需要一个正则表达式。

于 2012-06-12T13:26:56.037 回答
0

将 CKEditor 中的文本提取到一个变量中(如果 CKEditor 自己提供该功能,我不会感到惊讶),然后对提取的文本运行函数 .indexOf(SubstringToFind)。

于 2012-06-12T13:20:39.080 回答