使用javascript字符串方法解析从ckeditor返回的字符串
我试图从ckeditor中获取某个区域的数据。为了做到这一点,我使用以下代码使用javascript字符串方法解析从ckeditor返回的字符串,javascript,string,ckeditor,text-parsing,Javascript,String,Ckeditor,Text Parsing,我试图从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_
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_文本中包含的字符串相同
但当我这么做的时候
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,那么在我更改代码之前,这些索引将继续是错误的。关于
editor.setData
,您应该知道两个事实
setData()
之后执行的任何代码都应该在该回调中执行instancerady
事件之间),它以不同的模式工作-它只是缓存设置的值,并在getData()
上精确返回该值setData()
和getData()
——您的函数可以工作,因为您得到了期望得到的值
但是,当您尝试getData()
当编辑器已经准备好时,您会得到由CKEditor解析、修复、处理的HTML,并且可能会以不同的格式。我想您的indexOf()
检查不足以处理此问题。您必须重新考虑您的功能-例如,regexp可以提供帮助
删除htmlwriter
plugin也会有所帮助,该插件的HTML格式可能会使您更难使用它。例如:
config.removePlugins = 'htmlwriter';
我能让它工作。所以htmlwriter是问题之一,因为它必须通过HTML标记在两者之间添加空格。我发现的另一个问题是,它去掉了某些样式属性中的一些分号。总的来说,CKEditor对源代码进行了大量格式化,这使得正确索引非常困难,但这几乎是一个反复试验的过程。我最终使用了搜索JavaScript方法来搜索可以接受正则表达式的字符串,但我使用的方法与使用indexOf的方法相同,因此我不知道这是否有区别。您是否应该调用
get\u body\u html()
在像以前一样设置消息数据之后?我试图在使用setData()覆盖正文之前获取正文html,因此切换这两种格式将无法达到目的。我之前设置数据的那个只是一个测试,看看我的逻辑是否在第一时间起作用。那么问题是身体有什么数据。尝试输出/记录您的电子邮件变量,并检查它是否包含正文前
和正文页脚
如果不包含,那么您可能应该使用replace而不是substring,例如:email.replace(正文前),
从编辑器记录/输出数据时,正文具有正确的数据。问题是java中的indexOf方法似乎找不到它,即使它在那里。好吧,你可以发布一些示例数据来尝试对其进行排序吗?应该注意的是,即使关闭了htmlwriter,它也会去掉分号。