代码之家  ›  专栏  ›  技术社区  ›  Charles Anderson

jQuery('body').text()在不同的浏览器中给出不同的答案

  •  0
  • Charles Anderson  · 技术社区  · 15 年前

    <html>
    <head>
       <title>Test</title>
       <script type="text/javascript" src="jQuery.js"></script>
       <script type="text/javascript">
          function init() 
      {
             var text = jQuery('body').text();
             alert('length = ' + text.length);
          }
       </script>
    </head>
    <body onload="init()">0123456789</body>
    </html>
    

    当我在Firefox中加载这个时,长度报告为10。然而,在Chrome中它是11,因为它认为在“9”之后有一个换行符。在IE中也是11,但最后一个字符是转义符。同时,Opera认为有12个角色,最后两个是CR LF。

    如果将主体元素更改为包含跨距:

    <body onload="init()"><span>0123456789</span></body>
    

    以及jQuery调用:

    var text = jQuery('body span').text();
    

    然后所有浏览器都同意长度为10。

    很明显是身体因素导致了这个问题,但是有人能解释为什么会这样吗?我特别惊讶,因为优秀的jQuery通常是独立于浏览器的。

    3 回复  |  直到 15 年前
        1
  •  2
  •   hallvors    15 年前

        2
  •  1
  •   David Baron    15 年前

    这其中的一些可能与浏览器将文本放在正文外但放在HTML内,或者放在HTML外的不同行为有关。如果自从HTML5解析器登陆后,firefoxnightlies就改变了这一点,我也不会感到惊讶。

        3
  •  1
  •   Dave Jarvis James Eichele    11 年前

    由于不同浏览器的行为方式不同,我建议:

    jQuery('iframe').contents().find('body').text().trim();