我正试图从ckeditor获取某个数据区域。为此,我使用以下代码
function get_body_html(){
var email = CKEDITOR.instances['message'].getData();
var before_body = header_to + to + to_subject + subject + subject_body;
var s_index = email.indexOf(before_body)+before_body.length;
var e_index = email.indexOf(body_footer);
return email.substring(s_index,e_index);
}
由于某些原因,当我在页面加载时执行此操作
CKEDITOR.instances.message.setData(header_to + to + to_subject+
subject + subject_body + body_text + body_footer);
get_body_html();
它正常工作,并为我提供了body_text中包含的相同字符串。
但是当我这样做时
body_text = get_body_html();
CKEDITOR.instances.message.setData(header_to + to + to_subject + subject +
subject_body + body_text + body_footer);
在onclick函数中,它以某种方式获取错误的索引。有时它无法找到字符串并返回-1,有时它会得到一个没有意义的奇怪索引。只有当我的代码被更改为以不同的方式解决问题时,才会发生这些索引变化。因此,如果它是-5和2之类的错误索引,那么在我进行代码更改之前,这些索引将继续是错误的索引。
答案 0 :(得分:2)
关于editor.setData
,您应该了解两个事实。
setData()
之后执行的代码都应该在该回调中执行。instanceReady
事件之间),它以不同的模式工作 - 它只是缓存设置值,而在getData()
上它会返回该值。因此,正如我在页面加载中看到的那样,您同步调用setData()
和getData()
- 您的功能正常运行,因为您获得了期望得到的价值。
但是,当你在编辑器准备就绪时尝试getData()
时,你会得到解析,修复,处理过的HTML,并且可能由CKEditor进行不同的格式化。我想你的indexOf()
检查不足以解决这个问题。你必须重新考虑你的功能 - 例如regexp可以提供帮助。
还可以帮助删除htmlwriter
插件,该插件会以一种可能使您难以使用HTML的方式格式化HTML。 E.g:
config.removePlugins = 'htmlwriter';
答案 1 :(得分:0)
我能够让它发挥作用。所以htmlwriter是其中一个问题,因为它必须在HTML标签之间添加空格。我发现的另一个问题是它在某些样式属性中删除了一些分号。总体而言,CKEditor对源代码进行了大量格式化,这使得很难正确编制索引,但这几乎是一个反复试验的事情。我最终使用搜索JavaScript方法来获取可以采用正则表达式的字符串,但我使用的方法与使用indexOf的方式相同,所以我真的不知道这是否有所不同。