2012-05-28 16 views
0

我想在CKEditor中創建側邊欄插件,當我選擇帶粗體和斜體標籤的文本時,比提取內容時跳過該標籤並返回文本。我希望所有選定文本包括所有文本標籤。在CKEditor中提取範圍跳過標籤的方法

這是我的代碼:

function sidebar(editor){ 
    var selection = editor.getSelection(); 
    if (selection.getSelectedText() != "") { 

     var ranges = selection.getRanges(); 
     var pNode = editor.document.createElement('p'); 
     var extractedContent = ranges[0].extractContents(); 
     pNode.append(extractedContent); 
     var customNode = editor.document.createElement('cdl:sidebar'); 
     customNode.append(pNode); 
     var sidebarHolder = editor.document.createElement("sidebarholder"); 
     sidebarHolder.append(customNode); 
     var nodeHtml = sidebarHolder.getHtml(); 
     selection.selectRanges(ranges); 
     editor.insertHtml(nodeHtml); 
    } 
    else { 
     showErrorMessage("Selection is not proper"); 
    } 
} 

回答

1

可以使用CKEditor的步行路程,得到多選擇文本。

// Walker searching for guardElements. 
        var walker = new CKEDITOR.dom.walker(range); 

        var start = bookmarks[ i ].startNode, 
         end = bookmarks[ i++ ].endNode; 

        walker.evaluator = function(node) 
        { 
         return !! (node.type == CKEDITOR.NODE_ELEMENT 
           && node.getName() in guardElements 
           && !(node.getName() == (enterMode == CKEDITOR.ENTER_P ? 'p' : 'div') 
            && node.getParent().type == CKEDITOR.NODE_ELEMENT 
            && node.getParent().getName() == 'blockquote') 
           // Element must be fully included in the range as well. (#6485). 
           && node.getPosition(start) & CKEDITOR.POSITION_FOLLOWING 
           && ((node.getPosition(end) & CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_CONTAINS) == CKEDITOR.POSITION_PRECEDING)); 
        }; 

使用walker.js http://docs.cksource.com/ckeditor_api/symbols/src/core_dom_walker.js.html