CKEditor在所有<p> </p> </q>中插入<q>

时间:2015-02-26 18:49:54

标签: javascript html ckeditor

我在一个<textarea>中应用了一个CKEditor,其中包含以下内容:

<q>
<p>this is paragraph one.</p>
<p>this is paragraph two.</p>
</q>

所以,我想引用所有这些段落。但是,当我应用CKEditor时,上面的HTML转换为HTML:

<q>
<p><q>this is paragraph one.</q></p>
<p><q>this is paragraph two.</q></p>
</q>

这是我创建CKEditor实例的函数:

function create_ckeditor_instance(comment) {
    comment = '<q>' + comment.trim() + '</q>';

    var html = '<textarea rows="5" cols="80" id="reply-textarea">';
    html += comment;
    html += "</textarea>";

    $('reply-comment-wrapper').html(html);

    CKEDITOR.replace('reply-textarea');

    CKEDITOR.instances['reply-textarea'].on('instanceReady', function (event) {
      var range = CKEDITOR.instances['reply-textarea'].createRange();
      range.moveToPosition( range.root, CKEDITOR.POSITION_BEFORE_END );
      CKEDITOR.instances['reply-textarea'].getSelection().selectRanges( [ range ] );
      CKEDITOR.instances['reply-textarea'].focus();
    });

}

我的问题是,如何避免CKEditor的这种行为?

1 个答案:

答案 0 :(得分:4)

<q>的内容模型为Phrasing Content,但<p>元素为Flow Content且不属于<q>的有效子元素。

您需要使用<blockquote>代替。

外部<q></q>看起来像是一个错误,但我无法在此处重现它,当前版本使用CKEditor。

但它转变为:

<p><q>this is paragraph one.</q></p>
<p><q>this is paragraph two.</q></p>

是正确的,因为在这两个<q>周围包裹<p>会产生无效的代码。