0

CKEDITORのテキストエリアから選択したものにアラートを送信しようとしています。走ると"No text is selected."出てきます。"The current selection is: "+ selection. ここで変更する必要があると思うアラートを確認したいvartextarea = document.getElementById('editor1'); 誰かが問題を解決するのを手伝ってくれる?

設定:

function () 
{
    var selection = "";
    var textarea = document.getElementById('editor1');
    if ('selectionStart' in textarea)
    {
         // check whether some text is selected in the textarea
         if (textarea.selectionStart != textarea.selectionEnd)
         {
           selection = textarea.value.substring(textarea.selectionStart, textarea.selectionEnd);
         }
    }
    else
    {
        // Internet Explorer before version 9
       // create a range from the current selection
       var textRange = document.selection.createRange();
        // check whether the selection is within the textarea
      var rangeParent = textRange.parentElement();
      if (rangeParent === textarea)
      {
          selection = textRange.text;
      }
    }
    if (selection == "")
    {
       alert("No text is selected.");
    }
    else
    {      
       alert("The current selection is: " + selection);
    }
   }
4

1 に答える 1

1

選択を取得するには、次のコードを使用します。

CKEDITOR.instances.youEditorInstance.getSelection().getSelectedText();

ただし、このメソッドはテキストのみを返します (HTML マークアップは返しません)。


HTML マークアップを保存するには、次のようにします。

var range = CKEDITOR.instances.editor1.getSelection().getRanges()[ 0 ];
var rangeClone = range.clone();

range.collapse();
var el1 = range.getCommonAncestor( true, true );
range.splitElement( el1 );

rangeClone.collapse( true ); // to beginning
var el2 = rangeClone.getCommonAncestor( true, true );
rangeClone.splitElement( el2 );

var html = '';
var newRange = CKEDITOR.instances.editor1.getSelection().getRanges()[ 0 ];
var children = newRange.cloneContents().getChildren();

var element;
for( var i = 0 ; i < children.count() ; i++ ) {
    element = children.getItem( i );
    html += element.$.innerHTML ? element.getOuterHtml() : '';
}

html選択した HTML を保存します。

于 2012-10-19T12:06:13.317 に答える