JavaScriptを使用してCKEditorインスタンスで特定の単語を検索する方法を教えてもらえますか?検索という名前のボタンとテキストボックスが1つずつあります。テキストボックスに単語を入力してボタンを押すと、エディタにテキストが表示されます。ソリューションはJavaScriptのみである必要があります。
3 に答える
コマンドがありますがfind
、editor.execCommand( 'find' )
検索と置換ダイアログのみが表示され、満足のいくものではありません。
残念ながら、このダイアログの動作をコピーするには、独自の検索implを作成する必要があります。これは、その背後にあるロジックが外部から到達できないためです(これには、http://dev.ckeditor.comのチケットが必要です)。find
プラグインimplは_source/plugins / find / dialogs / find.jsで確認できますが、説明がないと十分に役立ちません。
それで、あなたは何をする必要がありますか?
まず、テキストが正確にどの位置にあるかを見つける必要があります。これは簡単なことではありません:)。DOMツリーから開始しeditor.document.getBody()
、ソース順にトラバースする必要があります。あなたを助けることができるツールがあります- CKEDITOR.dom.walker
。
new CKEDITOR.dom.range( editor.document )
2番目-範囲( )を作成し、その、、、を設定するstartContainer
必要があります。W3Cの範囲の詳細は次のとおりです-http: //www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html-CKEDITORの範囲は非常に似ています-APIドキュメントで詳細を確認できます(申し訳ありませんが、リンクを投稿しますが、評判が低いので:D)できません。startOffset
endContainer
endOffset
そして、範囲の開始と終了を設定するときは、を呼び出す必要がありますrange.select()
。エディターがフォーカスされている場合(これを呼び出すことで確認できますeditor.focus()
)、範囲が選択されます。
CKEditor内のテキストを変数に抽出し(CKEditorがそれ自体でその機能を提供していても驚かないでしょう)、抽出されたテキストに対して関数.indexOf(SubstringToFind)を実行します。
を使用して、CKEditorインスタンスからデータを抽出できますinstance.GetData()
。
単語をどのように見つけるかはあなた次第です。単純な場合は.indexOf()
@TomTemanが提案するように使用できますが、そうでない場合は正規表現が必要になる場合があります。