Разбор HTML-строки с помощью Ajax / jQuery - PullRequest
5 голосов
/ 07 октября 2009

Я спросил на Разбор HTML-строки с помощью jQuery , как я могу использовать jQuery для строки html Это все работает, но когда я применяю его к ajax - это не работает. Вот код.

<script>
  var url = 'moo.html';

  $.ajax({
    url: url,
    success: function ( code )
    {
      html = $(code);
      html.each(function() {
        alert( $(this).html() );
      });
    }
  });
</script>

moo.html содержит

<div id='test'>zebra</div>
<div id='foo'>bar</div>

Как я могу получить зебру и батончик?

Ответы [ 3 ]

14 голосов
/ 07 октября 2009

Я думаю, что новые строки в moo.html могут сбить вас с толку.

Любые символы новой строки в вашем html будут в конечном итоге проанализированы jQuery и сохранены как элементы текстового узла "\n". В результате $(code).each прекратит итерацию, когда ударит первый из этих узлов, и вы вызовете .html() для него (html() не работает с типами узлов, не относящихся к элементу).

Вам нужно только получить div в вашем html:

var divs = $(code).filter(function(){ return $(this).is('div') });
divs.each(function() {
    alert( $(this).html() )
})
0 голосов
/ 07 октября 2009

Попробуйте:

html = $("div", code);
html.each(function() {
    alert($(this).html());
});

Причина, по которой вы не можете сделать это так, как у вас, заключается в том, что при разборе HTML jQuery хочет иметь один корневой элемент. Если это не так, вы должны сделать это так, как описано выше. Следующий HTML / JS также будет работать:

var html = $(code);
html.children().each(....);

<div>
    <div id='test'>zebra</div>
    <div id='foo'>bar</div>
</div>
0 голосов
/ 07 октября 2009

попробуйте $ ('div', code) .each вместо .. вот так ...

$('div', code).each( function () {
  alert($(this).text());
});

Я еще не проверял это ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...