gpt4 book ai didi

javascript - 使用javascript字符串方法解析从ckeditor返回的字符串

转载 作者:行者123 更新时间:2023-11-30 17:58:08 27 4
gpt4 key购买 nike

我正在尝试从 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,那么在我更改代码之前,这些索引将继续是错误的索引。

最佳答案

关于 editor.setData,您应该了解两个事实。

  1. 在某些情况下它是异步的(这取决于编辑器的类型)。这就是为什么它也接受回调。因此,任何要在 setData() 之后执行的代码都应该在该回调中执行。
  2. 在编辑器准备好之前它永远不会是异步的。在此期间(在编辑器初始化和 instanceReady 事件之间)它以不同的模式工作 - 它只是缓存设置值并在 getData() 上返回准确的值。

因此,正如我在页面加载时看到的那样,您同步调用了 setData()getData() - 您的函数起作用是因为您获得了您期望获得的值.

但是,当您在编辑器已经准备好时尝试 getData() 时,您会得到由 CKEditor 解析、修复、处理并可能以不同方式格式化的 HTML。我猜你的 indexOf() 检查不足以处理这个问题。你必须重新考虑你的功能 - 例如正则表达式可以提供帮助。

删除 htmlwriter 插件也有帮助,它以一种可能使您更难使用它的方式格式化 HTML。例如:

config.removePlugins = 'htmlwriter';

关于javascript - 使用javascript字符串方法解析从ckeditor返回的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17703550/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com