我在一个<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的这种行为?
答案 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>
会产生无效的代码。