我用的是3.4的版本
CKEDITOR.instances.articleContent.getData();获取的是HTML源码模式下的字符数量
求教如何在编辑模式下获得文字数量

解决方案 »

  1.   

    var regex = /<[^>]+>/g;
    var html = CKEDITOR.instances.articleContent.getData();
    var len = html.replace(regex,"").length;len就是长度?这个意思吗?
      

  2.   

    var len = CKEDITOR.instances.articleContent.getData()
    .replace(/<.+?>/g,"") //去掉所有HTML标记
    .replace(/&.+?;/g,".") //将所有HTML实体替换为"."(也可以为其他的单字),以确保只按一个字计算
    .length
      

  3.   

    一般可视化编辑器生成的代码不会有格式问题导致的多余空格,如果是一般化的html代码(直接以代码模式编辑)就比较麻烦,目前就考虑到这么多情况,更多的情况自己分析,比如<pre>标签等更复杂的情况可能要用到中间值并分步替换,要注意的是不能影响后面的替换:
    var htmlStr = CKEDITOR.instances.articleContent.getData();
    var len = htmlStr
        .replace(/\s+/," ")               //将多个空字符换成一个空格
        .replace(/<br\s*?\/?>/,".")       //将所有换行符替换成一个字符(不用\n是因为可能会被后面换掉)
        .replace(/(<\/p>)/,".$1")         //为所有段落添加一个字符(或两个字符,自己定)将点放在前面避免影响后面的替换
        .replace(/<\/.+?>\s*<[^\/]>/g,"") //去掉所有尾-首相连的HTML标签(包括中间的空字符)
        .replace(/<.+?>/g,"")             //去掉剩下的HTML标签
        .replace(/&.+?;/g,".")            //转换所有实体为一个字符
        .length
      

  4.   

    前面几个忘了加g模式,顺便把pre一起处理了。
    var htmlStr = CKEDITOR.instances.articleContent.getData();
    var len = 0;
    //处理pre
    var pres = htmlStr.match(/<pre*.?>(.*?)<\/pre>/g);
    htmlStr = htmlStr.replace(/<pre*.?>(.*?)<\/pre>/g,"");
    if(pres)
        len += pres.join("").length;
    len += htmlStr
        .replace(/\s+/g," ")               //将多个空字符换成一个空格
        .replace(/<br\s*?\/?>/g,".")       //将所有换行符替换成一个字符(不用\n是因为可能会被后面换掉)
        .replace(/(<\/p>)/g,".$1")         //为所有段落添加一个字符(或两个字符,自己定)将点放在前面避免影响后面的替换
        .replace(/<\/.+?>\s*<[^\/]>/g,"") //去掉所有尾-首相连的HTML标签(包括中间的空字符)
        .replace(/<.+?>/g,"")             //去掉剩下的HTML标签
        .replace(/&.+?;/g,".")            //转换所有实体为一个字符
        .length