12

我在页面上有一个 CKEditor 的实例。我正在尝试为 CKEditor 的主体提供一个类或 ID,以便它与我在样式表中定义的一些样式相匹配。

有一个API 文档应该可以访问相应的 DOM 元素,但我似乎无法让它工作。我尝试以这种方式查询的所有对象都未定义。

有谁知道如何做到这一点,或者如何正确处理 CKEditor 的 dom 元素?

编辑:谢谢大家,nemisj 的回答为我做了,但由于某种原因,我没有在这个问题中设置“接受”复选标记。

4

7 回答 7

14

虽然在提出这个问题时 API 的那部分没有从 2.x 移植,但现在使用bodyIdbodyClass配置选项更容易。

当然,nemisj 的解释很好,对其他事情也很有用,但你必须记住,每次从设计(到源视图)切换时,iframe 都会被破坏,所以你需要重新分配你的属性如果您手动进行。

于 2010-05-17T16:55:41.420 回答
11

如果您谈论的是 CKEditor(版本 3),那么就有可能在编辑器本身中获取任何 DOM 实例。每个 CKEditor 实例都通过“document”属性引用它的文档。

var documentWrapper = edit.document; 

此引用代表所有 CKEditor 节点的一些公共包装,但它也具有对其节点的直接引用。您可以通过获取 ["$"] 属性来检索。

var documentNode = documentWrapper.$; // or documentWrapper['$'] ;

documentNode 将表示 iframe 内文档节点的 DOM 实例。拥有 DOM 实例后,您可以对 DOM 结构做任何您想做的事情,追加、删除、替换类、重建等。例如

documentNode.body.className = "zork";

我希望这应该足够了。

于 2009-12-08T15:41:49.927 回答
3

我今天在尝试像这样设置 bodyClass 时遇到了同样的问题:

CKEDITOR.replace('editor1', { fullPage : true, bodyClass : 'myClass'

});

我发现在这个版本(3.3.1)中,如果设置fullpage = true,设置bodyId或bodyClass不起作用,但如果设置fullPage = false,它确实有效。

希望这可以帮助。

于 2010-07-14T04:22:58.180 回答
2

手册

<static> {String|Array} CKEDITOR.config.contentsCss

用于将样式应用于内容的 CSS 文件。它应该反映要使用内容的最终页面中使用的 CSS。

config.contentsCss = '/css/mysitestyles.css';
config.contentsCss = ['/css/mysitestyles.css', '/css/anotherfile.css'];

默认值:

<CKEditor folder>/contents.css

于 2009-12-15T20:40:11.320 回答
0

不知道那个编辑器,但由于它们都以相同的方式工作,您可能无法访问实例创建的 DOM 元素,因为它们是在页面完成加载后创建的,并且 DOM 也已准备好。因此,此后添加的任何新 DOM 元素理论上都不存在。

不过,您可以尝试使用TinyMCE 编辑器,它与 jQuery javascript 库建立了“合作伙伴关系”来操作您想要的所有内容,并且编辑器本身几乎可以通过各种方式进行更改。

于 2009-12-04T03:04:55.133 回答
0

您的查询可能会返回未定义,因为编辑器实例放置在 iFrame 内,而您的查询不在那儿?

于 2009-12-15T20:42:14.763 回答
0

在 config.js 中,写下这段代码

config.bodyId = 'contents_id';

然后你会在 Ckeditor 中看到 body id 但是当你想访问这个 id 请使用

$('#parent_id').find('iframe').contents().find('#within_iframe')

$('#parent_id')方法form_id或任何父级是访问 iframe 的简单方法。按照此代码访问 iframe 中的元素

于 2014-01-19T12:51:14.227 回答