search

Home  >  Q&A  >  body text

javascript - js怎样获得准确的字符串长度

我用的jq的text()方法会将空格包含在内,可不可以像html那样将多个空格转为1个空格,不然切割字符串会不准确。

阿神阿神2896 days ago529

reply all(5)I'll reply

  • 高洛峰

    高洛峰2017-04-10 15:18:01

    这是一个典型的x/y问题,lz还是直接说你的需求是什么,而不是为了完成你的切割字符串需求而把问题弄复杂的“有多少字符参加了渲染”

    为了让你死心,我列举一些点吧:

    • 在生成文档树的parse阶段时不会对空格符做折叠的,而dom接口都仅仅是对文档树的内容,有多少空格一定会返回多少空格
    • 对空格的折叠行为发生在渲染这一步,这个规则由white-space规则给出
    • 不是所有情况下空格都会被折叠的,比如white-space:pre;就不会折叠
    • “空格符”不仅仅包括空格哟,在html定义的范围内,ASCII 空格 ,ASCII 制表符 	,ASCII 换页符 ,零宽度空格 ​都算空格符,而在css渲染的时候,折行的两个符号
也算空格符

    想要严格的执行标准来做空格的折叠绝非是一个str.split(/\s+/)这么简单,需要综合考虑white-space的属性,了解哪些符号在什么情形被丢弃,这个算法很复杂,我在这里翻译了相关标准;
    如果是切割字符串,那么大部分时候str.split(/\s+/)都是够用的。

    文字排印是浏览器渲染里非常复杂的一个话题,空格折叠只是其中一个棱面。

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 15:18:01

    参照 @jesusslim 同学的思路,和根据题主的问题描述,如下:

    javascriptvar str = $('p').text();
    str = str.replace(/\s+/g, function () {
        return ' ';
    });
    
    alert(str.length);
    

    reply
    0
  • ringa_lee

    ringa_lee2017-04-10 15:18:01

    不知道你的文字具体格式是什么。
    先假象下,如果你的字符串是'abcd efsef easdas laskdpoq '
    这样的话,你可以循环Replace,两个空格替换成一个空格,最终可以完成所有的地方都实现多个空格转为一个空格。

    有其他情况,再说。

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-10 15:18:01

    js虽然没有内置的trim去空格但有很多trim的正则实现 可以考虑下

    reply
    0
  • ringa_lee

    ringa_lee2017-04-10 15:18:01

    <!doctype html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <title>jQuery.trim demo</title>
      <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
    </head>
    <body>
    
    <pre id="original"></pre>
    <pre id="trimmed"></pre>
    
    <script>
    var str = "         lots of spaces before and after         ";
    $( "#original" ).html( "Original String: '" + str + "'" );
    $( "#trimmed" ).html( "$.trim()'ed: '" + $.trim(str) + "'" );
    </script>
    
    </body>
    </html>
    

    JQuery trim

    reply
    0
  • Cancelreply