如何配置ckeditor以不在<p>块中包装内容?</p>

时间:2010-07-26 23:27:05

标签: ckeditor word-wrap

我在我的网站上使用ckeditor,以便用户更轻松地输入HTML。

但是,我从ckeditor获取的数据包含在<p></p>块中。 (我不想要。)

是否有一些配置设置强制编辑器不将文本换行?

7 个答案:

答案 0 :(得分:122)

将以下内容添加到CKEditor的 config.js 文件中:

config.enterMode = CKEDITOR.ENTER_BR;

示例:

...

CKEDITOR.editorConfig = function (config)
{
    config.enterMode = CKEDITOR.ENTER_BR;

    ...
};

详细

控制此行为的配置设置取决于用户按 Enter 时要执行的操作。

以防万一有新手使用HTML的人阅读此内容,我会对所涉及的概念进行一些基本的解释,以及为什么在按下 Enter 键时需要插入标记。

我们知道,如果我们在HTML文档中输入一些文本,然后在新行上添加其他文本,浏览器将不会将文本显示为两行,它将忽略任何回车并且会压缩字符之间的多个空格到一个空间。

以下HTML:

qwer
tyui

将呈现为:

  

qwer tyui

因此编辑器需要插入一个HTML标记来告诉浏览器它应该在新行上显示第二组文本。

控制它的配置设置为config.enterMode,它提供三个选项:

1 - 插入段落

每次按 Enter 时,默认设置会创建一个段落元素:

config.enterMode = CKEDITOR.ENTER_P; // inserts `<p>...</p>`

2 - 插入'div'

您可以选择创建div元素而不是段落:

config.enterMode = CKEDITOR.ENTER_DIV; // inserts `<div></div>`

3 - 插入中断(您正在寻找的设置)

如果您不想将文本包装在任何内容中,可以选择插入换行标记:

config.enterMode = CKEDITOR.ENTER_BR; // inserts `<br />`

The CKEditor documentation indicates that using the ENTER_BR setting is not recommended

  

注意:由于其语义价值和正确性,建议使用CKEDITOR.ENTER_P设置。编辑器针对此设置进行了优化。

另一个相关设置'autoParagraph'

还有第二个设置可以控制类似的情况 - config.autoParagraph。它的功能取决于上面讨论的config.enterMode设置。

autoParagraph确定span等内联元素是否包含在p设置指定的块元素(diventerMode)中。默认是包装内联元素,因此如果您输入这样的跨度(作为HTML):

<span>asdfg</span>

它将被包装在像这样的p或div元素中:

<p><span>asdfg</span></p>

或者这个:

<div><span>asdfg</span></div>

如果您将内嵌元素设置为false或将enterMode设置为CKEDITOR.ENTER_BR,则不会换行内联元素。

The CKEditor documentation includes this note about config.autoParagraph

  

注意:更改默认值可能会引入不可预测的可用性问题。

更多设置

还有三个设置与此主题有些相关:

  • config.fillEmptyBlocks
  • config.forceEnterMode
  • config.ignoreEmptyParagraph

参考

可在此处找到可用配置选项的完整列表:

答案 1 :(得分:14)

我知道我的比赛有点晚了,但我认为OP正在寻找的选择是:


    config.autoParagraph = false;

答案 2 :(得分:5)

这在上面已经得到了很好的回答,但是如上所述,你不应该在主配置中改变它。

这样做的正确方法是.replace。

即。

    <form name="title" method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>">
    <textarea id="editor2" name="editor2" rows="300"><?php echo $editor2;?></textarea>
    <textarea id="editor1" name="editor1" rows="1" cols="50" onfocus="this.value=''; this.onfocus=null;">Type Tab Title Here:</textarea>
    <input type="submit" value="Submit">
    </form>

<script type="text/javascript">  
    CKEDITOR.replace( 'editor2', { 
    enterMode: CKEDITOR.ENTER_BR, 
    on: {'instanceReady': function (evt) { evt.editor.execCommand('maximize');     }},
    });      
    </script>

答案 3 :(得分:5)

没有任何配置更改的非常简单的解决方案是使用

  1. shift + enter表示换行符<br>
  2. 只需enter即可生成新段落。
  3. 优点是您不必进行任何配置更改。另外,你们两个都有。

答案 4 :(得分:2)

如果您想要排除<p>代码,并且只想在Ckeditor中使用Bold Italic上标下标等基本编辑工具,请按以下步骤操作:

我对此持100%肯定,因为我连续研究了36小时:)

步骤1:在PHP网页中添加此脚本

<script type="text/javascript">  
    CKEDITOR.replace( 'editor1', { 
    enterMode: CKEDITOR.ENTER_BR, 
    on: {'instanceReady': function (evt) { evt.editor.execCommand('');}},
    }); 
</script>

第2步:在您的textarea中添加id="editor2"onfocus="this.value='';",如下所示

<textarea id="editor2" name="AsYourWish" onfocus="this.value='';">

第3步:确保从Textarea中删除Class="ckeditor"

步骤4:如果没有发生,请重新加载您的网页删除缓存/历史记录并重新启动PC /笔记本电脑。

第5步:完成:)

答案 5 :(得分:0)

对于Django-ckeditor,将此配置添加到您的settings.py文件中:

ENTER_P    = 1 # default
ENTER_BR   = 2
ENTER_DIV  = 3

CKEDITOR_CONFIGS = {
    'default': {
        'enterMode': ENTER_BR,
    },
}

答案 6 :(得分:-1)

如果有人带着 ckeditor 5 来到这里,请不要使用此选项。他们已经删除了,我花了几天的时间才弄清楚。

恐怕您不会喜欢它,但是进入模式BR是根 万恶。如果我们能够将其从CKEditor 4中删除很长时间 以前,我们绝对不会在CKEditor 5中实现它。

相关GitHub issue