CKEDITOR.document和CKEDITOR.dom.document有什么区别?

akg*_*akg 2 javascript dom ckeditor

在ck-editor文档中,CkEDITOR.dom.document被定义为 -

Represents a DOM document.
Run Code Online (Sandbox Code Playgroud)

示例给出 -

var document = new CKEDITOR.dom.document( document )
Run Code Online (Sandbox Code Playgroud)

该函数的参数'document'应该是什么?

同样在CKEDITOR核心代码库中给出了这个定义 -

CKEDITOR.document = new CKEDITOR.dom.document( document );
Run Code Online (Sandbox Code Playgroud)

表示CKEDITOR.document是包含CKEDITOR实例的窗口的文档.例如,可以从窗口的DOM中获取任何内容 -

alert( CKEDITOR.document.getBody().getName() ); // 'body'
Run Code Online (Sandbox Code Playgroud)

我对这两者的重要性以及如何以不同方式使用它们,在何处使用它们感到困惑?

谢谢.

ole*_*leq 9

CKEDITOR.document

您注意到CKEDITOR.document的定义如下

CKEDITOR.document = new CKEDITOR.dom.document( document );
Run Code Online (Sandbox Code Playgroud)

这意味着它是CKEditor库的最顶层 document.这是包含和加载库文档.通常,它也是网页的最顶层文档

window.document === CKEDITOR.document.$ // true
Run Code Online (Sandbox Code Playgroud)

CKEDITOR.document也是所有CKEditor 内联实例的通用文档.所以,如果你创建了许多像

var i1 = CKEDITOR.inline( 'inline1' );
var i2 = CKEDITOR.inline( 'inline2' );
Run Code Online (Sandbox Code Playgroud)

你会注意到他们都共享同一个文件

i1.document.equals( CKEDITOR.document ); // true
i2.document.equals( CKEDITOR.document ); // true 
Run Code Online (Sandbox Code Playgroud)

因为WYSIWYG编辑直接在其中的可信元素中进行CKEDITOR.document.

CKEDITOR.documenteditor.document

另一方面,网页中可能有许多子文档,即因为每个<iframe>windowwindow.document子文档都是新的.这正是当你创建一个经典的编辑器实例时会发生的事情,这个实例带来了一个<iframe>带有满足感的主体进行编辑(是的,你正在编辑文本,而<iframe>不是<textarea>).

您可能会注意到每个实例都有自己的单独document(CKEDITOR.editor-property-document),并且这些文档没有与之相关CKEDITOR.document.

var c1 = CKEDITOR.replace( 'textarea1' );
var c2 = CKEDITOR.replace( 'textarea2' );

c1.document.equals( CKEDITOR.document ); // false
c2.document.equals( CKEDITOR.document ); // false
c1.document.equals( c2.document ); // false
Run Code Online (Sandbox Code Playgroud)

每个实例都调用new CKEDITOR.dom.document( documentWithinAnIframe )并分配给它editor.document.

结论

所以总结一下

  • `dialog.getContentElement().getElement().$`应该给你一个原生的DOM对象.`$(dialog.getContentElement().getElement().$)`应该返回jQuery对象. (3认同)