Проблема не совсем в jQuery, а в различиях в реализации браузера .innerHTML
.Разные браузеры обрабатывают это по-разному, например, в Opera ваш пример работает нормально, Firefox может работать с настройками, в IE8 он работает наполовину с настройками, а Chrome лишает всех.
Это все о том, как они обрабатывают вызов .innerHTML
, это то, что jQuery использует внутренне при создании фрагментов документа .
Вот быстрая тестовая страница, использующая точный HTML, который у вас есть , и результаты нескольких браузеров:
Chrome 6 (запускает alert()
, удаляет почти все):
<div id="child_div"></div>
- Результаты:
- Весь
<head>
и содержимое очищено, нечего получить
IE8 (Запускает alert()
, сохраняет <meta>
, но в качестве элемента верхнего уровня протестируйте его в IE здесь ):
<META name=keywords content="parent, html, parsing">
<DIV id=child_div></DIV>
- Результаты:
$(html).filter("meta").attr("name")
: "ключевые слова" <title>
было удалено
Firefox 3.6 (Запускает alert()
, сохраняет <head>
содержимое, но снова в качестве элементов верхнего уровня, проверить его здесь ):
<title>Sub Page to Parse</title>
<meta name="keywords" content="parent, html, parsing">
<div id="child_div"></div>
- Результаты:
$(html).filter("meta").attr("name")
: "ключевые слова" $(html).filter("title").html()
: "Sub Page to Parse"
Opera 10.6 (Запускает alert()
, разбирает только сценарии, проверяет здесь ):
<head>
<title>Sub Page to Parse</title>
<meta name="keywords" content="parent, html, parsing">
</head>
<div id="child_div"></div>
- Результаты:
$(html).find("meta").attr("name")
: «ключевые слова» $(html).find("title").html()
: «Sub Page to Parse»
Так что проблема нене jQuery, но то, что различные браузеры делают в своих .innerHTML
методах, чтобы убрать все, что они хотят.Это делает синтаксический анализ чего-либо в <head>
особенно ненадежным, обратите внимание, что когда оно вообще сохраняется, оно может быть или не быть элементом верхнего уровня, например, $(html).length
будет отличаться.
Я бы сказал, что у вас есть два варианта, но ни один из них не выглядит слишком привлекательным:
- Сделайте запрос через вызов на стороне сервера, он получит необходимую вам информацию
- Сам анализируем HTML, но вы не получите никакой пользы от jQuery в этом отделе, будут здесь убийцами и сделают jQuery практически бесполезным.