14

私のアプリケーションでは、ニュースの挿入セクションで、ニュースの概要にニュースコンテンツのサブ文字列を使用しています。ユーザーからニュースコンテンツのテキストを取得するには、CKEditorを使用し、ニュースの概要には、サブストリングメソッドを使用して特定の長さのニュースコンテンツを取得します。ただし、CKEditorを使用している場合は、プレーンテキストではなくhtmlタグ付きのテキストを取得し、サブストリングメソッド、私のニュースの要約がめちゃくちゃになります!このコントロールから生のテキストを取得するにはどうすればよいですか? 私はこれを読みましたが、getText()メソッドを使用できません

4

6 に答える 6

21

次のようなコードを試してください。

CKEDITOR.instances.editor1.document.getBody().getText();

それは私にとってはうまくいきます。http://ckeditor.com/demoでテストできます。これは理想的ではありませんが(テーブルセル内のテキストはスペースなしで結合されます)、ニーズには十分な場合があります。


編集(2017年12月20日): CKEditor 4デモはhttps://ckeditor.com/ckeditor-4/に移動され、異なるエディター名を使用しているため、実行する新しいコードは次のとおりです。

CKEDITOR.instances.ckdemo.document.getBody().getText();

また、「記事エディタ」で機能することも重要です。「インラインエディタ」では、別の要素のテキストを取得する必要があります。

CKEDITOR.instances.editor1.editable().getText();
于 2012-10-15T12:48:20.247 に答える
12

このようにしてください

//getSnapshot() retrieves the "raw" HTML, without tabs, linebreaks etc
var html=CKEDITOR.instances.YOUR_TEXTAREA_ID.getSnapshot();
var dom=document.createElement("DIV");
dom.innerHTML=html;
var plain_text=(dom.textContent || dom.innerText);

alert(plain_text);

viola、plain_textの必要な部分を取得します。

更新/例

このJavaScriptを追加

<script type="text/javascript">
function createTextSnippet() {
    //example as before, replace YOUR_TEXTAREA_ID
    var html=CKEDITOR.instances.YOUR_TEXTAREA_ID.getSnapshot();
    var dom=document.createElement("DIV");
    dom.innerHTML=html;
    var plain_text=(dom.textContent || dom.innerText);

    //create and set a 128 char snippet to the hidden form field
    var snippet=plain_text.substr(0,127);
    document.getElementById("hidden_snippet").value=snippet;

    //return true, ok to submit the form
    return true;
}
</script>

HTMLで、フォームにonsubmit-handlerとしてcreateTextSnippetを追加します。例:

<form action="xxx" method="xxx" onsubmit="createTextSnippet();" />

フォーム内、間<form></form>挿入

<input type="hidden" name="hidden_snippet" id="hidden_snippet" value="" />

フォームが送信されると、フォーム内の残りのフィールドとともに、サーバーサイドでhidden_​​snippetにアクセスできます。

于 2012-10-15T12:55:53.877 に答える
6

私は個人的にこのメソッドを使用してコードを圧縮し、ダブルスペースと改行も削除します。

        var TextGrab = CKEDITOR.instances['editor1'].getData();
        TextGrab = $(TextGrab).text(); // html to text        
        TextGrab = TextGrab.replace(/\r?\n|\r/gm," "); // remove line breaks   
        TextGrab = TextGrab.replace(/\s\s+/g, " ").trim(); // remove double spaces
于 2016-12-22T20:10:13.863 に答える
2

私はこの関数を使用しました:

function getPlainText( strSrc ) {
    var resultStr = "";

    // Ignore the <p> tag if it is in very start of the text
    if(strSrc.indexOf('<p>') == 0)
        resultStr = strSrc.substring(3);
    else
        resultStr = strSrc;

    // Replace <p> with two newlines
    resultStr = resultStr.replace(/<p>/gi, "\r\n\r\n");
    // Replace <br /> with one newline
    resultStr = resultStr.replace(/<br \/>/gi, "\r\n");
    resultStr = resultStr.replace(/<br>/gi, "\r\n");

    //-+-+-+-+-+-+-+-+-+-+-+
    // Strip off other HTML tags.
    //-+-+-+-+-+-+-+-+-+-+-+

    return  resultStr.replace( /<[^<|>]+?>/gi,'' );
}

関数呼び出し:

var plain_text = getPlainText(FCKeditorAPI.GetInstance("FCKeditor1").GetXHTML());

テスト用にこのフィドルを作成しました:http://jsfiddle.net/4etVv/3/

于 2013-03-07T16:12:17.383 に答える
1

私はこのメソッドを使用します(jQueryが必要です):

var objEditor =CKEDITOR.instances["textarea_id"];
var msg = objEditor.getData();
var txt = jQuery(msg).text().replaceAll("\n\n","\n");

それが役に立てば幸い!

于 2016-03-02T19:07:11.253 に答える
1

editorそれがCKEditorインスタンスであると仮定します(CKEditor.instances.editor1上記の例から、またはイベントを使用している場合はevent.editor)。次のコードを使用して、プレーンテキストコンテンツを取得できます。

editor.ui.contentsElement.getChild(0).getText()

どうやらCKEditorは実際の編集可能なコンテンツに「音声ラベル」要素を追加します。したがってgetChild(0)

于 2017-12-19T12:45:58.663 に答える