使用Javascript或jQuery清除WYSIWYG编辑器的HTML输出

雕刻师

我使用的CMS有一个非常烦人的所见即所得编辑器,名为Summernote。这个编辑器看起来很不错,并且实际上工作得很好,但是它输出的HTML令人震惊地不好,并且没有用于样式输出的任何配置选项。例如,这是一些带下划线的粗体,斜体文本:

<span style="text-decoration: underline;">
    <span style="font-style: italic;">
        <span style="font-weight: bold;">
            Help!! I'm being squashed by 3 heavy tags.
        </span>
    </span>
</span>

图像具有内联CSS样式,使图像具有固定的宽度,这对于响应式站点是无用的:

<img src="..." style="width:832px;">

YouTube iFrame具有固定尺寸,可以从手机屏幕上弹出:

<iframe src="..." width="560" height="380">

因此,如您所见,这不是很好,但是我不能更改编辑器(不允许这样做),并且我需要想出一种方法来纠正这些问题,然后再将HTML保存到数据库中。就我而言,使用jQuery。

因此,经过一番尝试和错误,我设法通过以下小片段修复了响应性问题:

var code = $('#summernote').code();
var newCode = $('<div></div>').append(code)
    .find('iframe').wrap('<div class="flexVideo"/>')
    .end()
    .find('img').removeAttr('style').wrap('<div class="flexPhoto"/>')
    .end()
    .html();

正在运行的JSFIDDLE演示。

如您所见,这会将所有iFrame包裹在一个响应式包装中,将所有图像包装在另一个包装中(出于非响应目的),并从图像中删除所有内联样式,使它们更加流畅。这很好用,但是我在最后一部分上确实很挣扎。用适当的元素替换所有这些span标签,很遗憾,我需要寻求帮助。

我了解使用类似的方法可以选择SPAN元素为BOLD并使用,wrapInner()并且unwrap()可以使用适当的文本元素替换范围:

$('span').filter(function() {
     return $(this).css('font-weight') == 'bold';
}).wrapInner('<b></b>').unwrap()

1)我什wrapInner()无法独自进行工作(请检查此小提琴)。

2)如果实际上可行,无论是在身体上还是在效率上,请提供建议,并建议如何将它们全部链接在一起。

3)有时跨度顺序会有所不同,具体取决于单击的按钮的顺序。

这是我的伪劣,尝试失败:

var code = $('#summernote').code();
var newCode = $('<div></div>').append(code)
    .find('iframe').wrap('<div class="flexVideo"/>')
    .end()
    .find('img').removeAttr('style').wrap('<div class="flexPhoto"/>')
    .end()
    .find('span').filter(function() {
        return $(this).css('font-weight') == 'bold';
    })
    .wrapInner('<b></b>')
    .unwrap()
    .end()
    .html();

请参阅此失败的JSFIDDLE演示。没有错误,但是肯定不是按照所告诉的那样做的。我曾尝试大喊大叫,但这没用。

惊人的答案

对于所有那些挫败的Summernote用户,您可能会发现这很有用。为什么很棒?好吧,尽管在此示例中将其分为多行,但这实际上是单线的!!

var newCode = $('<div></div>').append(code)
   .find('iframe')
       .wrap('<div class="flexVideo"/>')
   .end()
   .find('img')
       .removeAttr('style')
       .wrap('<div class="flexPhoto"/>')
   .end()
   .find('span')
       .filter("[style*='underline']")
           .removeAttr('style')
           .addClass('underline')
       .end()
       .filter("[style*='bold']")
           .wrapInner('<b></b>')
           .children()
               .unwrap()
           .end()
       .end()
       .filter("[style*='italic']")
           .wrapInner('<i></i>')
           .children()
               .unwrap()
           .end()
       .end()
   .end()
   .html();

它有什么作用?

  • 从图像中删除内联样式以限制响应速度。
  • 将图像包裹在DIV中(个人喜好,可以使用按钮和文本覆盖图像)。
  • 将iframe视频包装在DIV中以提高响应速度。
  • 将内联替换text-decoration:underline为class underline
  • <span style="font-style:italic">用适当的<i>标签替换标签。
  • <span style="font-weight:bold">用适当的<b>标签替换标签。
克里斯·斯皮特尔斯

您的选择器都一团糟,您没有正确引用链中所需的元素。

在这种情况下(出于诊断目的),我从末尾删除了.html()并将newCode输出到console.log()命令中,可以在fireBug中进行查询。

这说明过滤器选择器找不到匹配的元素。我将过滤器更改为使用其他选择器。然后我意识到您正在尝试解开错误的元素,从而删除了大部分标记。因此,我找到了匹配的粗体跨度的子级,然后解开它们。然后,我结束了连锁。

var code = '<span style="text-decoration: underline;"><span style="font-style: italic;"><span style="font-weight: bold;">asdasdad</span></span></span><br><br><img src="" style="width:748px;"><br><br><iframe src="" width="560" height="380"><iframe>';

var newCode = $('<div></div>').append(code)
    .find('iframe')
        .wrap('<div class="flexVideo"/>')
    .end()
    .find('img')
        .removeAttr('style')
        .wrap('<div class="flexPhoto"/>')
    .end()
    .find('span')
        .filter("[style*='bold']")
            .wrapInner('<strong></strong>')
            .children()
                .unwrap()
            .end()    
        .end()   
    .end()
    .html();

$('.output').text(newCode);

有关详细信息,请参见此更新的提琴:http : //jsfiddle.net/P2Ry8/6/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Stackoverflow使用什么WYSIWYG编辑器?

来自分类Dev

Stackoverflow使用什么WYSIWYG编辑器?

来自分类Dev

如何使用jquery或javascript在tejquery文本编辑器中清除值

来自分类Dev

如何使用 HTML 编辑器清除 WebBrowser 控件的内容?

来自分类Dev

如何使用带有 Django 的 WYSIWYG HTML Javascript 编辑器将数据传递到数据库

来自分类Dev

使用JavaScript展平DOM中的嵌套范围,以优化HTML编辑器输出

来自分类Dev

如何在 Wagtail CMS 中使用 WYSIWYG 编辑器?

来自分类Dev

Django WYSIWYG编辑器的“阅读更多”

来自分类Dev

从NSString删除WYSIWYG编辑器标记

来自分类Dev

CodeIgniter - 将 WYSIWYG 编辑器的 HTML 内容保存在数据库中以供日后使用

来自分类Dev

制作javascript / html / css编辑器

来自分类Dev

服务器端Blazor的WYSIWYG HTML编辑器

来自分类Dev

自定义HTML输出的Wordpress编辑器简码

来自分类Dev

用于php / html的静态静态页面的wysiwyg编辑器

来自分类Dev

Windows 窗体应用程序中的 C# WYSIWYG HTML 编辑器

来自分类Dev

使用MathJax进行数学方程式的WYSIWYG编辑器

来自分类Dev

将WYSIWYG编辑器与PHP转义方法一起使用

来自分类Dev

在Angular2中使用wysiwyg编辑器文本

来自分类Dev

将WYSIWYG编辑器与PHP转义方法一起使用

来自分类Dev

清除Obout编辑器内容

来自分类Dev

将mixin与在线Pony编辑器输出结合使用

来自分类Dev

哪个是eclipse kepler最好的html / css / javascript / jquery文本编辑器插件?

来自分类Dev

CRM 2013中的RTF编辑器(WYSIWYG)

来自分类Dev

创建一个简单的WYSIWYG Web编辑器

来自分类Dev

如何使用JavaScript或jquery在[b]而不是<b>的富文本编辑器中加粗文本

来自分类Dev

如何使用JavaScript在文本区域中获取HTML编辑器的输入

来自分类Dev

我的 HTML + JavaScript 代码适用于在线编辑器,但不能离线使用

来自分类Dev

jQuery HTML文本编辑器选择

来自分类Dev

剑道 html 编辑器

Related 相关文章

  1. 1

    Stackoverflow使用什么WYSIWYG编辑器?

  2. 2

    Stackoverflow使用什么WYSIWYG编辑器?

  3. 3

    如何使用jquery或javascript在tejquery文本编辑器中清除值

  4. 4

    如何使用 HTML 编辑器清除 WebBrowser 控件的内容?

  5. 5

    如何使用带有 Django 的 WYSIWYG HTML Javascript 编辑器将数据传递到数据库

  6. 6

    使用JavaScript展平DOM中的嵌套范围,以优化HTML编辑器输出

  7. 7

    如何在 Wagtail CMS 中使用 WYSIWYG 编辑器?

  8. 8

    Django WYSIWYG编辑器的“阅读更多”

  9. 9

    从NSString删除WYSIWYG编辑器标记

  10. 10

    CodeIgniter - 将 WYSIWYG 编辑器的 HTML 内容保存在数据库中以供日后使用

  11. 11

    制作javascript / html / css编辑器

  12. 12

    服务器端Blazor的WYSIWYG HTML编辑器

  13. 13

    自定义HTML输出的Wordpress编辑器简码

  14. 14

    用于php / html的静态静态页面的wysiwyg编辑器

  15. 15

    Windows 窗体应用程序中的 C# WYSIWYG HTML 编辑器

  16. 16

    使用MathJax进行数学方程式的WYSIWYG编辑器

  17. 17

    将WYSIWYG编辑器与PHP转义方法一起使用

  18. 18

    在Angular2中使用wysiwyg编辑器文本

  19. 19

    将WYSIWYG编辑器与PHP转义方法一起使用

  20. 20

    清除Obout编辑器内容

  21. 21

    将mixin与在线Pony编辑器输出结合使用

  22. 22

    哪个是eclipse kepler最好的html / css / javascript / jquery文本编辑器插件?

  23. 23

    CRM 2013中的RTF编辑器(WYSIWYG)

  24. 24

    创建一个简单的WYSIWYG Web编辑器

  25. 25

    如何使用JavaScript或jquery在[b]而不是<b>的富文本编辑器中加粗文本

  26. 26

    如何使用JavaScript在文本区域中获取HTML编辑器的输入

  27. 27

    我的 HTML + JavaScript 代码适用于在线编辑器,但不能离线使用

  28. 28

    jQuery HTML文本编辑器选择

  29. 29

    剑道 html 编辑器

热门标签

归档