14

在我的应用程序中,在插入新闻部分,我使用新闻内容的子字符串作为新闻摘要。为了从用户那里获取新闻内容文本,我使用 CKEditor,对于新闻摘要,我使用子字符串方法来获取一定长度的新闻内容。但是当我使用 CKEditor 时,我得到带有 html 标签而不是纯文本的文本,当我使用substring 方法,我的新闻摘要变得一团糟!我如何从这个控件中获取原始文本? 我读了这个,但我不能使用 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);

中提琴,抓住你想要的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 中,将 createTextSnippet 作为 onsubmit-handler 添加到表单中,例如

<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 回答