jQuery ('body'). text () дает разные ответы в разных браузерах - PullRequest
0 голосов
/ 20 мая 2010

Мой 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 ]

2 голосов
/ 25 мая 2010

Opera берет новые строки после тега закрытия BODY или HTML и добавляет их в содержимое BODY AFAIK. Это, вероятно, откуда взялась дополнительная CR LF.

1 голос
/ 21 мая 2010

Возможно, это связано с другим поведением, когда браузеры помещают текст, который находится вне тела, но внутри HTML, или текст, который находится вне HTML. Меня не удивит, что это изменилось в ночных Firefox с тех пор, как появился HTML5-парсер.

1 голос
/ 20 мая 2010

Поскольку разные браузеры ведут себя по-разному, я предлагаю:

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

Это должно привести к последовательным результатам.

...