在ckeditor中选择html

pon*_*ayz 7 html javascript wysiwyg ckeditor

我正在使用CKEditor中的自定义链接生成器.我想要做的是获取用户选择的html.我尝试了很多东西,我的最后一个功能是

function getTheHtml(editor) {
    var selection = editor.getSelection();
    if (selection.getType() == CKEDITOR.SELECTION_ELEMENT) {
        var selectedContent = selection.getSelectedElement().$.outerHTML;
    } else if (selection.getType() == CKEDITOR.SELECTION_TEXT) {
        if (CKEDITOR.env.ie) {
            selection.unlock(true);
            selectedContent = selection.getNative().createRange().text;
        } else {
            selectedContent = selection.getNative();
        }
    }
    return selectedContent;
}
Run Code Online (Sandbox Code Playgroud)

这个效果很好,但我还有问题,如果用户选择它可以工作的文字,如果他选择一个图像就可以工作但是当用户选择一个图像加上一些文字我只得到文本例如这是用户真正选择的

 <img align="" alt="" border="0" class="donotlink" hspace="5" src="image/pic.jpg" vspace="5" />Some Random Text
Run Code Online (Sandbox Code Playgroud)

这就是我从我的功能中得到的

Some Random Text
Run Code Online (Sandbox Code Playgroud)

我也试过这样做:

function getSelectionHtml(editor) {
    var sel = editor.getSelection();
    var ranges = sel.getRanges();
    var el = new CKEDITOR.dom.element("div");
    for (var i = 0, len = ranges.length; i < len; ++i) {
        el.append(ranges[i].cloneContents());
    }
    return el.getHtml();
}
Run Code Online (Sandbox Code Playgroud)

但是它选择了第一个最接近的节点,当我尝试用"a"标签包装选择时,我无法将用户选择的内容包装在第一位

我知道这是一个经常出现的话题,但是因为我没有找到如何解决...提前谢谢.

ole*_*leq 14

使用range.cloneContents().在编辑器中选择任何内容后,在控制台中调用以下代码:

var editor = CKEDITOR.instances.editor1,
    range = editor.getSelection().getRanges()[ 0 ],
    el = editor.document.createElement( 'div' );

el.append( range.cloneContents() );
console.log( el.getHtml() );
Run Code Online (Sandbox Code Playgroud)