6

背景 - 在由 TinyMCE 为大型媒体网站背后的企业内部 CMS 提供支持的文章编辑器中

HTML

<p>non-breaking-space: &nbsp; pound: &pound; copyright: &copy;</p>

JS

console.log($('p').html());
console.log(document.getElementsByTagName('p').item(0).innerHTML);

两者都返回

non-breaking-space: &nbsp; pound: £ copyright: ©

当我期待

non-breaking-space: &nbsp; pound: &pound; copyright: &copy;

一些元素的实体被反转(如英镑和版权),一些元素被保留(非破坏空间)。我需要一种方法来获取所有保留的原始内部 HTML,而不是由浏览器处理的;那可能吗?

这是一个 TinyMCE 插件,它使用 jQuery 处理输入并将其放回。内容是通过数据库加载的,插件正在处理图像标签,根本不想修改文本内容。将某些实体自动更改回原始字符不会有太大问题,但是 -

  • 我们不能修改社论的输入,即使它是次要的
  • 由于我们网站上的一些浏览器兼容性问题,我们强制这些必须是实体才能保存

我会使用这个答案 - https://stackoverflow.com/a/4404544/830171 - 但是不能,因为我的 HTML 代码位于用户需要编辑的文本区域内,并且我需要运行 jQuery DOM 操作(通过插件)。

我能想到的一种方法是不使用 jQuery/DOM 来处理我需要更改的图像标签,而是像许多 TinyMCE 插件一样使用正则表达式;但是由于我在正则表达式中被击落以从所有元标记中提取所有属性以尝试在 HTML 上进行任何正则表达式,因此希望有更好的方法!

4

1 回答 1

1

Tinymce 使用 contenteditable iframe 来编辑内容。这就是为什么 console.log($('p').html());会记录其他内容的原因。

使用以下代码获取纯编辑器内容:

tinymce.get('your_editor_id').getBody().innerHTML
于 2013-01-16T16:22:28.703 回答