我正在使用 jquery 来更改 CKEditor 实例中的标记。具体来说,我让某人从我的表单中的选择列表中选择一个徽标,然后用他们的选择更新 ckeditor 中的徽标。
但是,问题是徽标显示为断开的链接。如果我检查 ckeditor 源它是正确的,并且如果我右键单击图像并选择图像属性,它会在 img 对话框中正确显示,如果我然后确定该对话框,图像会正确显示在预览中。
如果我使用Firebug检查页面上的img标签本身,ckeditor已经把src放到了两个数据标签中,data-cke-565-src(这个名字好像变了)和data-cke-saved-src。但是 img 本身不再具有 src 属性。当我使用图像属性窗口使图像在编辑器中正确显示时,src 属性已返回。
我正在使用 getData 和 setData 来更改内容:
var emailSupport = {
editorName: 'HtmlBody',
getBodyText: function () {
return CKEDITOR.instances[emailSupport.editorName].getData();
},
$getBodyText: function () {
return $("<div>" + emailSupport.getBodyText() + "</div>");
},
setBodyText: function (h) {
CKEDITOR.instances[emailSupport.editorName].setData(h instanceof jQuery ? h.html() : h);
return h instanceof jQuery ? h : $("<div>" + h + "</div>");
},
refreshLogo: function (n, $h) {
if (typeof $h === "undefined") $h = emailSupport.$getBodyText();
var $emailLogo = $h.find("img.emailLogo");
var $img = $("#" + n).clone().attr("id", null);
if ($img.length > 0)
$emailLogo.show().replaceWith($img.addClass("emailLogo"));
else {
$emailLogo.fadeOut();
alert('Could not find selected image');
}
emailSupport.setBodyText($h);
}
};
这是我正在使用的 javascript 的一个子集,但应该是相关的东西。徽标本身位于页面的 DOM 中,但被隐藏了,这就是为什么我可以根据 GUID 抓取它们并将占位符徽标 img 替换为图像本身的副本。
我可能给了你比我需要的更多的代码,因为调试 setBodyText 显示正确的 HTML 被传递给 setData,所以很明显 ckeditor 正在剥离 src 属性。
在我看来,这是一个错误,但我想知道是否有人以前经历过这种情况,或者有解决方法。我试图避免在调用 setData 后手动更改 DOM,查找任何没有 src 属性的 img 标签并从 data-cke-saved-src 属性中复制它,但这是我能想到的唯一解决方法现在。
作为更新,在写这篇文章时,我尝试了一些替代文件,有时效果很好。它与文件名一致,适用于一个文件,而不适用于另一个文件,但我还没有弄清楚工作图像和损坏图像之间的区别是什么!
文件路径都是虚拟的,但是从根目录开始:它们都以 / 开头,例如:
<img width="160" data-cke-862-src="/Content/Logos/thumbs/w160_505_Logo.jpg.png" data-cke-saved-src="/Content/Logos/thumbs/w160_505_Logo.jpg.png" class="imagingThumb emailLogo" alt="505_Logo.jpg" />