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

时间:2010-05-20 16:44:29

标签: javascript jquery firefox google-chrome opera

我的HTML看起来像这样:

<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元素更改为包含span:

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

和jQuery调用:

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

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

显然,这是导致问题的身体元素,但任何人都可以解释为什么会发生这种情况?我特别惊讶,因为优秀的jQuery通常与浏览器无关。

3 个答案:

答案 0 :(得分:2)

Opera在BODY或HTML关闭标记之后接受换行符,并将它们添加到BODY内容AFAIK中。这可能是额外CR LF的来源。

答案 1 :(得分:1)

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

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

这应该产生一致的结果。

答案 2 :(得分:1)

其中一些可能与浏览器将文本放在HTML外部的文本或HTML之外的文本的不同行为有关。如果自HTML5解析器登陆以来Firefox的夜晚发生了变化,那就不会让我感到惊讶。