У меня есть var, который содержит полную страницу HTML, включая голову, HTML, тело, и т.д. Когда я передаю ту строку в .html () функция, полосы jQuery все те элементы, такие как тело, HTML, голова, и т.д., который я не хочу.
Мой var данных содержит:
<html>
<head>
<title>Untitled Document</title>
</head>
<body>
</body>
</html>
Затем мой jQuery:
// data is a full html document string
data = $('<div/>').html(data);
// jQuery stips my document string!
alert(data.find('head').html());
Я должен управлять полной строкой страницы HTML, так, чтобы я мог возвратить то, что в своей стихии. Я хотел бы сделать это с jQuery, но это кажется всеми методами, добавьте (), предварительно ожидайте () и HTML () вся попытка преобразовать строку в dom элементы, которые удаляют все другие части полной страницы HTML.
Есть ли иначе, что я мог сделать это? Я был бы прекрасным использованием другого метода. Моя заключительная цель состоит в том, чтобы найти определенные элементы в моей строке, таким образом, я полагал, что jQuery будет лучшим, так как я так привык к нему. Но, если это собирается обрезать и удалить части моей строки, я оказываюсь перед необходимостью искать другой метод.
Идеи?
После нескольких быстрых тестов мне кажется, что это поведение вызвано не jQuery, а браузером.
Как вы можете легко убедиться сами (DEMO http://jsbin.com/ocupa3 )
var data = "<html><head><title>Untitled Document</title></head><body><p>test</p></body></html>";
data = $('<div/>').html(data);
alert(data.html());
дает разные результаты в разных браузерах
Opera 10.10
<HEAD><TITLE>Untitled Document</TITLE></HEAD><P>test</P>
FF 3.6
<title>Untitled Document</title><p>test</p>
IE6
<P>test</P>
, так что это не имеет ничего общего с jQuery. Это браузеры, которые удаляют некоторые теги, когда вы вставляете целую строку html в div. Но вам нужно будет пройти через весь код jQuery для html ()
, чтобы быть уверенным. И вам нужно будет сделать это для всех браузеров, поскольку jQuery пытается выполнить свою работу несколькими разными способами.
В качестве решения я советую вам изучить использование iframe (возможно, скрытого) и установить это содержимое iframe в имеющуюся html-строку. Но имейте в виду, что возиться с iframe и программно изменять их содержимое - тоже непростая задача. Также существуют различные причуды, связанные с браузером, и проблемы со временем.
Нет, функция jQuery html
просто отправляет строку в свойство элемента innerHTML
, которое является функцией браузера, которая сообщает ему, что нужно проанализировать HTML на элементы DOM и добавить их на страницу.
Ваш браузер не работает со страницей как с данными HTML, он работает с ней как с DOM и импортирует / экспортирует HTML.
В JavaScript очень хорошая поддержка регулярных выражений . В зависимости от сложности вашей задачи вы можете обнаружить, что это лучший способ обработки ваших данных.
Нет необходимости в контейнере div.
Вы пробовали это?:
var foo = $(data); // data is your full html document string
Затем вы можете искать внутри него следующим образом:
$('.someClass', foo); // foo is the document you created earlier
Обновление:
Как заметил другой ответ, то, как это будет действовать, зависит от браузера.
Я немного просмотрел jQuery docs и обнаружил следующее:
Когда HTML сложнее, чем одиночный тег без атрибутов, так как это в приведенном выше примере фактическое создание элементов обрабатывается механизмом браузера
innerHTML
. В частности, jQuery создает новый {{1} }
и устанавливает свойствоinnerHTML
элемента на переданный фрагмент HTML .Кажется, что когда вы используете весь html-документ в виде строки, это ничем не отличается от установки свойства
innerHTML
дляdiv
, которое вы делаете с помощьюcreateElement
.0ответ дан 30 November 2019 в 14:00поделиться