CKEditor 4真的为HTML5做好了准备吗

CKEditor 4真的为HTML5做好了准备吗,html,ckeditor,Html,Ckeditor,我尝试使用新的CKEditor 4,因为版本3.6中的代码更正无法接受HTML 5这样的有效代码: <a href="#"><p>something</p></a> 但新的CKEditor版本仍然修复此代码,所以问题出在哪里?是否需要在配置中将HTML 5设置为默认值?否。CKEditor解析器使用静态DTD。HTML5不能用静态DTD描述,因此目前CKEditor不能支持这种标记 请参阅了解更多信息。有一种可行的方法可以解决这个问题,使用x

我尝试使用新的CKEditor 4,因为版本3.6中的代码更正无法接受HTML 5这样的有效代码:

<a href="#"><p>something</p></a>


但新的CKEditor版本仍然修复此代码,所以问题出在哪里?是否需要在配置中将HTML 5设置为默认值?

否。CKEditor解析器使用静态DTD。HTML5不能用静态DTD描述,因此目前CKEditor不能支持这种标记


请参阅了解更多信息。

有一种可行的方法可以解决这个问题,使用xsl将任何未知元素映射到div或span标记,使用原始元素作为类名,然后在提交时将其反转。我们从xml开始一直这样做,而且效果很好。

对于将来遇到同样问题的人,我确实提出了一个解决方案,但我并不太高兴,因为应该有一个选项,因为它在中完全有效

config.js
文件中,添加以下配置设置:

// Display all children elements allowed in a <a> element.
console.log(CKEDITOR.dtd[ 'a' ]);

// Simply redefine DTD like this:
CKEDITOR.dtd['a']['div'] = 1;
CKEDITOR.dtd['a']['p'] = 1;
CKEDITOR.dtd['a']['i'] = 1;
CKEDITOR.dtd['a']['span'] = 1;

// Check if <div> can be contained in a <p> element.
console.log( !!CKEDITOR.dtd[ 'a' ][ 'div' ] ); // default false

// Check if <a> can be contained in a <div> element.
console.log( !!CKEDITOR.dtd[ 'div' ][ 'a' ] ); // default true
config.protectedSource.push(/[\r\n]|)(

基本上,我们在这里所做的是:

  • 查找新行
    \r
  • 查找新行
    \n
  • 查找任何打开的定位点:
    -
    (]+>)
  • 查找结束锚标记

  • 此正则表达式将停止验证找到的结果,我相信有更好的方法可以做到这一点,因为我不是regexPERT(在您的config.js文件中,添加以下配置设置:

    // Display all children elements allowed in a <a> element.
    console.log(CKEDITOR.dtd[ 'a' ]);
    
    // Simply redefine DTD like this:
    CKEDITOR.dtd['a']['div'] = 1;
    CKEDITOR.dtd['a']['p'] = 1;
    CKEDITOR.dtd['a']['i'] = 1;
    CKEDITOR.dtd['a']['span'] = 1;
    
    // Check if <div> can be contained in a <p> element.
    console.log( !!CKEDITOR.dtd[ 'a' ][ 'div' ] ); // default false
    
    // Check if <a> can be contained in a <div> element.
    console.log( !!CKEDITOR.dtd[ 'div' ][ 'a' ] ); // default true
    
    //显示元素中允许的所有子元素。
    console.log(CKEDITOR.dtd['a']);
    //只需重新定义DTD,如下所示:
    CKEDITOR.dtd['a']['div']=1;
    CKEDITOR.dtd['a']['p']=1;
    CKEDITOR.dtd['a']['i']=1;
    CKEDITOR.dtd['a']['span']=1;
    //检查是否可以包含在元素中。
    console.log(!!CKEDITOR.dtd['a']['div']);//默认值为false
    //检查是否可以包含在元素中。
    console.log(!!CKEDITOR.dtd['div']['a']);//默认值为true
    

    对于Drupal 8,您可以将此代码添加到您的管理主题js中,这不是最好的解决方案,而是功能性的

    这是他们的票证系统中报告的内容,我不确定您是否正在寻找可以与html5一起使用的替代解决方案,但这里可以提及。现在……没有其他进展,即使发布了最终版本?