在 CKEditor 3.0 中关闭封闭 <p> 标签

Posted

技术标签:

【中文标题】在 CKEditor 3.0 中关闭封闭 <p> 标签【英文标题】:Turn off enclosing <p> tags in CKEditor 3.0 【发布时间】:2010-12-30 23:19:02 【问题描述】:

CKEditor 3.x 是否可以关闭

内所有书面内容的自动封闭?

我试过了

  CKEDITOR.config.enterMode = CKEDITOR.ENTER_BR;

但这只是在离开封闭段落时将内联换行符更改为 。

当前编写“测试”会产生此输出

<p>
    Test</p>

但我希望它是简单的

Test

是否有此配置属性,或者是否有其他内联编辑器更适合此?

【问题讨论】:

How to configure ckeditor to not wrap content in <p> block? 的可能重复项 【参考方案1】:

好吧,我在 laravel 中使用 ckeditor,它使用简单的strip_tags($var) 函数进行输出,如下所示:

向其他页面发送赞这个值:!! strip_tags($six_answer) !!

和/或输出时使用相同的代码:!! strip_tags($six_answer) !!

结果如下,没有任何&lt;p&gt; 标签。

【讨论】:

它的作品谢谢!【参考方案2】:

将此作为您的 config.js 文件代码

CKEDITOR.editorConfig = function( config ) 

   //   config.enterMode = 2; //disabled <p> completely
        config.enterMode = CKEDITOR.ENTER_BR; // pressing the ENTER KEY input <br/>
        config.shiftEnterMode = CKEDITOR.ENTER_P; //pressing the SHIFT + ENTER KEYS input <p>
        config.autoParagraph = false; // stops automatic insertion of <p> on focus
    ;

【讨论】:

你忘记了 CKEDITOR.ENTER_BR 后面的;【参考方案3】:

在 VS2015 中,这可以将 Enter 键变成 &lt;br&gt;

myCKEControl.EnterMode = CKEditor.NET.EnterMode.BR

就个人而言,我不在乎我的结果文本是否只有&lt;br&gt; 而不是&lt;p&gt;。它渲染得非常好,看起来就像我想要的那样。最后,它起作用了。

【讨论】:

此答案不适用于通用 CKEditor,仅在 VS2015 中有效。 Kosi2801,这就是为什么我说“在 VS 2015 中”。我发布了这个答案,以防有人专门寻找 VS2015 的解决方案。当我特别说明平台时,我不赞成投反对票。请修改您的投票。另外,请在投票前仔细阅读。 Joe Schmucker,如果有人正在寻找 VS2015 解决方案,应该有一个单独的问题。您的答案与原始问题中的任何内容都没有关系(如何在 html 编辑器 CK 3.x 中关闭

或者是否有任何其他可以用于网站的编辑器)。我确实非常仔细地阅读了您的答案,并且还研究了它是否可以以任何方式应用于网站的 CKEditor 3.x,但因为它没有答案没有用。因此,否决票以及我的评论。请不要为与所讨论的问题不同的问题提供答案。

我明白了。我搜索了该问题的解决方案,并找到了这篇文章。 我没有看到巡演。我会通过它。感谢您花时间解释。我很感激。【参考方案4】:

设置这样的配置:

    CKEDITOR.config.enterMode = CKEDITOR.ENTER_BR
    CKEDITOR.config.forcePasteAsPlainText = true

【讨论】:

【参考方案5】:

将此作为您的 config.js 文件代码

CKEDITOR.editorConfig = function( config ) 

   //   config.enterMode = 2; //disabled <p> completely
        config.enterMode = CKEDITOR.ENTER_BR // pressing the ENTER KEY input <br/>
        config.shiftEnterMode = CKEDITOR.ENTER_P; //pressing the SHIFT + ENTER KEYS input <p>
        config.autoParagraph = false; // stops automatic insertion of <p> on focus
    ;

【讨论】:

【参考方案6】:

CKEDITOR.config.enterMode = CKEDITOR.ENTER_BR; - 这非常适合我。 您是否尝试过清除浏览器缓存 - 这有时是个问题。 您也可以使用 jQuery 适配器查看它:

<script type="text/javascript" src="/js/ckeditor/ckeditor.js"></script>
<script type="text/javascript" src="/js/ckeditor/adapters/jquery.js"></script>
<script type="text/javascript">
$(function() 
    $('#your_textarea').ckeditor(
        toolbar: 'Full',
        enterMode : CKEDITOR.ENTER_BR,
        shiftEnterMode: CKEDITOR.ENTER_P
    );
);
</script>

根据@Tomkay 的评论更新:

从 CKEditor 3.6 版开始,您可以配置是否要使用 &lt;p&gt;&lt;/p&gt; 等标签自动包装内联内容。这是正确的设置:

CKEDITOR.config.autoParagraph = false;

来源: http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.autoParagraph

【讨论】:

我意识到这已被接受为正确答案,但我认为它实际上并不正确。这确实可以防止内容被包裹在段落标签中,但它也可以防止在“应该”时生成段落标签,而是插入换行符。正确的解决方案是在按下回车键时阻止默认的

,同时仍将内容包装在段落中。
对于从直接 javascript 以外的其他部分获取配置的人:CKEDITOR.ENTER_BR 的值为 2。所以你也可以enterMode: 2 它对我来说并不完美:在 BR 失败后插入一个特殊字符并在 Firefox 中出现 NS_ERROR_FAILURE @MaksymilianMajer 你可以配置这个。见:docs.cksource.com/ckeditor_api/symbols/… @Tomkay 在我写答案的时候你不能。我将对其进行编辑以反映新的配置选项。【参考方案7】:
if (substr_count($this->content,'<p>') == 1)

  $this->content = preg_replace('/<\/?p>/i', '', $this->content);

【讨论】:

if (substr_count($this->content,'

') == 1) $temp = preg_replace("/

/i","",$这->内容); $temp = preg_replace("//i","",$temp); $this->content = $temp;

【参考方案8】:

编辑源代码(或关闭富文本)并将 p 标签替换为 div。然后按你想要的方式设置 div 的样式。

ckEditor 不会在下一次提交时添加任何包装器元素,因为您已将 div 放入其中。

(这解决了我的问题,我正在使用 Drupal 并且需要小的 html sn-ps 编辑器总是添加额外的,但其余时间我想要包装 p 标签)。

【讨论】:

【参考方案9】:

在互联网上,人们已经注意到将 config.enterMode 设置为 CKEDITOR.ENTER_BR 会从 CKEditor 中删除包装段落标签。值得注意的是,该设置将 Enter 键的行为更改为插入换行符而不是段落,这是不可取的。

参见:http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode“建议使用 CKEDITOR.ENTER_P 设置,因为它的语义价值和正确性。”

但是,用于删除初始段落 config.autoParagraph 的设置也不可取,因为它引入了“不可预测的可用性问题”,因为编辑器真的想要一个***块元素。

见:http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.autoParagraph

魔法发生在 wysiwygarea/plugin.js 的第 410 行,编辑器根据 config.enterMode 选择默认的块元素。更改默认块元素的配置选项将允许我们从 div 开始,但每次按下回车时我们都会继续获得更多 div,除非我们通过菜单更改段落格式。

见:http://docs.cksource.com/ckeditor_api/symbols/src/plugins_wysiwygarea_plugin.js.html

可以通过后处理(在服务器上或在 CKEditor 的 getData 事件中)删除包装段落标记,但这会导致我们遇到与禁用 autoParagraph 相同的问题:没有***块。

我宁愿说没有一个好的解决方案,而是一些半解决方案,而不是接受更改 config.enterMode 作为规范的解决方案。

【讨论】:

不错的答案。我不确定我是否更喜欢你的最后一句话,但相关配置选项的总结、它们的含义等很好!谢谢1 是的,我对我的结论也不是很着迷。这真的更像是一个警告而不是一个解决方案! 所以... CKEditor 看不到 BR 标签中的语义值?它们确实有目的,但如果编辑器处于 ENTER_P 模式,它就会将它们删除。【参考方案10】:

找到了!

ckeditor.js 第 91 行 ... 搜索

B.config.enterMode==3?'div':'p'

改成

B.config.enterMode==3?'div':''(没有!)

转储缓存和 BAM!

【讨论】:

【参考方案11】:

在 config.js 中试试这个

CKEDITOR.editorConfig = function( config )

config.enterMode = CKEDITOR.ENTER_BR;
config.shiftEnterMode = CKEDITOR.ENTER_BR;
;

【讨论】:

【参考方案12】:

我正在做一些我不引以为豪的解决方法。在我实际保存到数据库的 Python servlet 中,我这样做:

if description.startswith('<p>') and description.endswith('</p>'):
    description = description[3:-4]

【讨论】:

但是如果有多个段落,这不会导致像First paragraph&lt;/p&gt;&lt;p&gt;Second paragraph这样的东西吗?

以上是关于在 CKEditor 3.0 中关闭封闭 <p> 标签的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Security 中关闭 HTTP 会话超时?

如何避免在引导程序中关闭模式

在 Razor 中关闭 HTML 编码

当离子菜单按钮在离子中关闭时如何触发功能

">" 在 wordpress 中关闭 php 标签

在 Visual Studio 2015 中关闭 Browser Link