我正在寻找一种使 CKEDITOR 所见即所得内容具有交互性的方法。这意味着例如将一些 onclick 事件添加到特定元素。我可以做这样的事情:
CKEDITOR.instances['editor1'].document.getById('someid').setAttribute('onclick','alert("blabla")');
处理此操作后,效果很好。但因此,如果我将模式更改为源模式,然后返回到所见即所得模式,则 javascript 将无法运行。onclick 动作在源模式中仍然可见,但不会在 textarea 元素内呈现。
然而,有趣的是,这每次都能正常工作:
CKEDITOR.instances['editor1'].document.getById('id1').setAttribute('style','cursor: pointer;');
而且它也不会在 textarea 元素中呈现!这怎么可能?使用 CKEDITOR 内容元素的 onclick 和 onmouse 事件的最佳方式是什么?
我尝试通过源模式手动编写:
<html>
<head>
<title></title>
</head>
<body>
<p>
This is some <strong id="id1" onclick="alert('blabla');" style="cursor: pointer;">sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p>
</body>
</html>
并且 Javascript(onclick 操作)不起作用。有任何想法吗?
非常感谢!
我的最终解决方案:
editor.on('contentDom', function() {
var elements = editor.document.getElementsByTag('span');
for (var i = 0, c = elements.count(); i < c; i++) {
var e = new CKEDITOR.dom.element(elements.$.item(i));
if (hasSemanticAttribute(e)) {
// leve tlacitko mysi - obsluha
e.on('click', function() {
if (this.getAttribute('class') === marked) {
if (editor.document.$.getElementsByClassName(marked_unique).length > 0) {
this.removeAttribute('class');
} else {
this.setAttribute('class', marked_unique);
}
} else if (this.getAttribute('class') === marked_unique) {
this.removeAttribute('class');
} else {
this.setAttribute('class', marked);
}
});
}
}
});