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

What is the difference between CKEDITOR.document and CKEDITOR.dom.document?

本文关键字:CKEDITOR 什么 区别 dom dococument document      更新时间:2023-09-26

在ck编辑器文档中,CkEDITOR.dom文档被定义为-

Represents a DOM document.

示例为-

var document = new CKEDITOR.dom.document( document )

这个函数的参数"document"应该是什么?

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

CKEDITOR.document = new CKEDITOR.dom.document( document );

它表示CKEDITOR.dococument是包含CKEDITOR实例的窗口的文档。可以从窗口的DOM中获取任何东西,例如

alert( CKEDITOR.document.getBody().getName() ); // 'body'

我对两者的意义感到困惑,以及如何以不同的方式使用它们,在哪里使用它们?

谢谢。

CKEDITOR.document

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

CKEDITOR.document = new CKEDITOR.dom.document( document );

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

window.document === CKEDITOR.document.$ // true

CKEDITOR.document也是所有CKEditor内联实例的通用文档。因此,如果你创建了一些像这样的

var i1 = CKEDITOR.inline( 'inline1' );
var i2 = CKEDITOR.inline( 'inline2' );

你会注意到它们都共享同一个文档

i1.document.equals( CKEDITOR.document ); // true
i2.document.equals( CKEDITOR.document ); // true 

因为所见即所得编辑直接在CCD_ 5内的内容可编辑元素中进行。

CKEDITOR.documenteditor.document

另一方面,网页中可能有许多子文档,即因为每个<iframe>意味着新的windowwindow.document。这正是当您创建一个经典编辑器实例时所发生的情况,该实例带来了一个具有内容可编辑主体的新<iframe>进行编辑(是的,您正在和<iframe>中编辑文本,而不是<textarea>)。

您可能会注意到,每个实例都有自己单独的documentCKEDITOR.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

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

结论

所以总结

  • CCD_ 19是最上面的CCD_
  • editor.document是一个与编辑器实例关联的文档。所有内联实例共享同一文档(CKEDITOR.document),而所有经典实例都有自己的文档
  • CKEDITOR.dom.document是CKEditor库的构造函数,它将原生DOM文档封装到CKEDITOR.dom.domObject中,向用户公开漂亮的API(如equals()方法)以在代码中进行操作。
    • 它类似于CKEDITOR.dom.element,但用于文档而非元素
    • CCD_ 27和CCD_ 28都是CCD_