Javascript 从CKeditor获取非html文本

Javascript 从CKeditor获取非html文本,javascript,text,ckeditor,Javascript,Text,Ckeditor,在我的应用程序中,在插入新闻部分,我使用新闻内容的子字符串作为新闻摘要。为了从用户那里获取新闻内容文本,我使用了CKEditor,而对于新闻摘要,我使用了substring方法来获取一定长度的新闻内容。但是当我使用CKEditor时,我得到的文本带有html标记,而不是纯文本。当我使用substring方法时,我的新闻摘要会变得混乱!如何从该控件获取原始文本? 但是我不能使用getText()方法,请尝试以下代码: CKEDITOR.instances.editor1.document.getB

在我的应用程序中,在插入新闻部分,我使用新闻内容的子字符串作为新闻摘要。为了从用户那里获取新闻内容文本,我使用了CKEditor,而对于新闻摘要,我使用了substring方法来获取一定长度的新闻内容。但是当我使用CKEditor时,我得到的文本带有html标记,而不是纯文本。当我使用substring方法时,我的新闻摘要会变得混乱!如何从该控件获取原始文本? 但是我不能使用getText()方法,请尝试以下代码:

CKEDITOR.instances.editor1.document.getBody().getText();
这对我来说很好。你可以在电脑上测试。这并不理想(表格单元格中的文本没有空格连接在一起),但可能足以满足您的需要


编辑(2017年12月20日):CKEditor 4演示被移动到并使用不同的编辑器名称,因此要执行的新代码是:

CKEDITOR.instances.ckdemo.document.getBody().getText();
同样重要的是,它将在“文章编辑器”和“内联编辑器”中工作,您需要获得不同元素的文本:

CKEDITOR.instances.editor1.editable().getText();
像这样做

//getSnapshot()检索“原始”HTML,不带制表符、换行符等
var html=CKEDITOR.instances.YOUR_TEXTAREA_ID.getSnapshot();
var dom=document.createElement(“DIV”);
dom.innerHTML=html;
var plain_text=(dom.textContent | | dom.innerText);
警报(纯文本);
维奥拉,抓住你想要的那部分纯文本

更新/示例

添加此javascript


函数createTextSnippet(){
//如前所述,替换您的_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);
//创建一个128字符的代码段,并将其设置为隐藏表单字段
var snippet=plain_text.substr(0127);
document.getElementById(“隐藏的片段”).value=snippet;
//返回true,确定提交表单
返回true;
}
在HTML中,将createTextSnippet作为onsubmit处理程序添加到表单中,例如


在表单内部,介于
插入之间


提交表单时,您可以在服务器端访问隐藏的_代码段以及表单中的其他字段

我使用了这个函数:

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,'' );
}
我创建这个提琴是为了测试:

我使用这个方法(需要jQuery):


希望有帮助

我个人使用此方法压缩代码,并删除双空格和换行符:

        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

假设
editor
是您的CKEditor实例(
CKEditor.instances.editor1
来自上述示例,或者如果您使用的是事件,则
event.editor
)。您可以使用以下代码来获取纯文本内容

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


显然,该编辑器将“语音标签”元素添加到实际的可编辑内容中。因此
getChild(0)

如果您不需要任何HTML(因此结果没有格式),那么为什么需要CKEditor?正如我所解释的,对于新闻摘要,我不需要任何HTML,因为此摘要是由c中的子字符串方法生成的。这是c代码吗?我的编辑器没有实例属性!这是一个JavaScript代码。您应该用它替换代码中的“CKEDITOR.instances.YOUR_TEXTAREA_ID.getSnapshot();”。太棒了!非常感谢。就是这个!非常感谢,伙计。这取决于编辑的类型。在经典版本(上的文章编辑器)中,以下代码可以正常工作:
CKEDITOR.instances.ckdemo.document.getBody().getText()抱歉,我不熟悉使用此控件,我必须在哪里使用此代码?我想将此数据保存在我的sql server数据库中,因此我需要在代码中使用此数据。抱歉,我认为这是一个javascript问题(da*ned标记)-但我想你也可以在asp.net中使用javascript,并将文本发送到服务器-反正是客户端?通过javascript将其放置在隐藏字段中,当您发布文章时,在插入其他表单字段时,通过引用ASP中隐藏字段的id在表中插入文本片段。对不起,我也是javascript新手:(,那么你能通过一个例子来说明这一点吗?如果第一件事不是
,那么这个函数将完全失败--编辑:修复非常感谢!$(TextGrab).text();-这就是我需要的
var objEditor =CKEDITOR.instances["textarea_id"];
var msg = objEditor.getData();
var txt = jQuery(msg).text().replaceAll("\n\n","\n");
        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