避免在ckeditor源中出现额外的换行符

时间:2014-10-25 08:53:32

标签: javascript ckeditor

我希望我能在适当的社区中提出这个问题。

我是一个长期的fckeditor用户,正在咬紧牙关,现在用ckeditor取代fckeditor。它的安装非常简单,基本上可以正常使用!

我确实遇到了一个问题,我希望这里有人可以指点我能做什么。

问题是出现额外的换行符。

附带的第一个屏幕截图是编辑时编辑器在我的网站上的样子。 enter image description here

附带的第二个屏幕截图显示了发布后查看的结果(您可以看到所有额外的换行符。

enter image description here

原因 - 如果我查看源(第3个屏幕截图)似乎是ul标签周围的源中的额外行。或者它们可能在p标签周围。我不确定。

enter image description here

事实上,如果我在" source"中进行编辑模式并删除多余的行并重新提交最终结果看起来很好。

我想知道最好的做法是避免那些额外的换行符。我修改了我的设置以添加此内容:

        CKEDITOR.replace( '%% whichField %%', {
            on: {
                instanceReady: function( ev ) {
                    // Output paragraphs as <p>Text</p>.
                    this.dataProcessor.writer.setRules( 'p', {
                        indent: false,
                        breakBeforeOpen: false,
                        breakAfterOpen: false,
                        breakBeforeClose: false,
                        breakAfterClose: false
                    });
                }
            }
        });

这有点帮助,但我仍然在SOU​​RCE中看到额外的空行,具体取决于输入。我想知道是否有一个通用的全面解决方案。而不是指定&#39; p&#39;在上面的设置中,我可以指定更通用的内容吗?或者是否有更好的做法来处理这种&#34;额外的换行符&#34;问题

谢谢,

道格

1 个答案:

答案 0 :(得分:1)

HTML元素之间的间距不应有任何区别,只要您稍后不使用nl2br()这样的函数处理此代码,而HTML Output Formatting会使用<BR>替换换行符。

我的猜测是你有大量的<BR>标签,CKEditor没有生成,但这是通过类似于上述功能的功能完成的。

为了阻止CKEditor生成换行符,以便您没有要替换的新换行符,请查看https://www.drupal.org/project/wysiwyg_linebreaks示例以获取灵感。在底部的“获取示例源代码”部分中,单击第一个链接。你会发现有一些代码可以找到所有可以设置编写器规则的元素,在任何地方都设置false而不是true,这应该可以解决问题:

for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) {
    this.dataProcessor.writer.setRules( e, {
        indent: false,
        breakBeforeOpen: false,
        breakAfterOpen: false,
        breakBeforeClose: false,
        breakAfterClose: false
    });
}

如果我是你,我宁愿做一些智能检测是否在将新行字符放入HTML标记内部之前将其更改为<BR>,以保持HTML源代码的美观。您可能需要检查{{3}}的灵感(我不是该模块的作者)。