获得原始的dom元素innerHTML而无需javascript处理

时间:2013-01-16 16:15:43

标签: javascript html tinymce html-entities

背景 - 在由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代码在用户需要编辑的textarea中,并且我需要运行jQuery DOM操作(通过插件)。

我能想到的一种方法是不使用jQuery / DOM来处理我需要更改的图像标签,而是像许多TinyMCE插件一样使用正则表达式;但是因为我在regex to pull all attributes out of all meta tags中因为尝试HTML的正则表达式而被击落,所以希望有更好的方法!

1 个答案:

答案 0 :(得分:1)

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

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

tinymce.get('your_editor_id').getBody().innerHTML