Jquery / Javascript, фильтрация HTML-объекта из ответа AJAX - PullRequest
4 голосов
/ 05 мая 2011

У меня есть этот кусок HTML:

<div id="1">
  <div class="text">
     Text for div 2 
  </div>
<img src="images/image1.jpg"></img>
</div>

<div id="2">
  <div class="text">
    Text in div 2
  </div>
  <img src="images/image2.jpg"></img>
</div>

Который я беру с помощью простого .ajax-вызова

var html = $.ajax({
         url: "htmlsnippet.html",
         cache: false,
         async: false,
         dataType: "html"
         }).responseText;

Если я отфильтрую это с помощью:

var htmlFiltered = $(html).filter("#1");

это работает просто отлично, я получаю весь div с id = "1",
но если я использую:

var htmlFiltered = $(html).filter("#1 .text");

переменная htmlFiltered является пустым объектом. Я не могу понять, что я делаю неправильно.

Ответы [ 3 ]

12 голосов
/ 05 мая 2011

Вы должны сохранить его следующим образом:

$.ajax({
   url: "htmlsnippet.html",
   cache: false,
   async: false,
   dataType: "html",
   success: function(data){
      html = data;
   }
}

РЕДАКТИРОВАТЬ: ваш способ получения HTML работает, но это не рекомендуется.
Вы не можете получить свой последний элемент, потому что вы используете filter вместо find, поэтому вы должны иметь:

var htmlFiltered = $(html).find("#1 .text");

вместо

var htmlFiltered = $(html).filter("#1 .text");

Также W3C рекомендует не иметь числовых идентификаторов.

РЕДАКТИРОВАТЬ 2 : Это должно работать:

var htmlFiltered = $(html).filter("#1").find(".text");

Надеюсь, это поможет.Приветствия

3 голосов
/ 07 июня 2013

Если вам не нужны какие-либо специальные функции, предоставляемые полным методом $.ajax, вам следует попробовать $.load():

Метод .load (), в отличие от $ .get (), позволяет нам указать часть удаленного документа для вставки. Это достигается с помощью специального синтаксиса для параметра url. Если в строку включен один или несколько пробельных символов, предполагается, что часть строки, следующая за первым пробелом, является селектором jQuery, определяющим загружаемый контент.

$('#result').load('ajax/test.html #container');

http://api.jquery.com/load/#loading-page-fragments

0 голосов
/ 06 июня 2014

Это работает для меня:

$.get(url,function(content) {
    var content = $(content).find('div.contentWrapper').html();
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...