在 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) !!
。
结果如下,没有任何<p>
标签。
【讨论】:
它的作品谢谢!【参考方案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 键变成 <br>
myCKEControl.EnterMode = CKEditor.NET.EnterMode.BR
就个人而言,我不在乎我的结果文本是否只有<br>
而不是<p>
。它渲染得非常好,看起来就像我想要的那样。最后,它起作用了。
【讨论】:
此答案不适用于通用 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 版开始,您可以配置是否要使用 <p></p>
等标签自动包装内联内容。这是正确的设置:
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</p><p>Second paragraph
这样的东西吗?以上是关于在 CKEditor 3.0 中关闭封闭 <p> 标签的主要内容,如果未能解决你的问题,请参考以下文章