Возможная ошибка селектора класса JQuery - PullRequest
5 голосов
/ 04 ноября 2010

У меня есть вызов ajax, который возвращает фрагмент HTML.Я пытаюсь выбрать div в этом фрагменте перед рендерингом.

Пример HTML:

<div class="event-detail repBy-container">
    <div class="copy">.....</div>
    <div class="links">
       ....
    </div>
    <div class="contacts">
      <div class="name-brand">....</div><div class="details">...., <a href="mailto:...@....">...</a></div>
    </div>
</div>

Теперь проблема:

function ajaxReturn(data) {
   alert($(data).find('.event-detail').length); <-- Returns 0
   alert($(data).find('.copy').length); <-- Returns 1
}

Этоошибка или я что-то не так делаю?

Ответы [ 3 ]

5 голосов
/ 04 ноября 2010

.find() получает потомков * только 1005 *, не с текущего уровня, вам нужно .filter(), чтобы получить предметы из текущего набора (которыйявляется корнем того, что вы вернули), например:

function ajaxReturn(data) {
   alert($(data).filter('.event-detail').length); //<-- Returns 1
   alert($(data).find('.copy').length); //<-- Returns 1
}

Если вы хотите, чтобы .find() работал в обоих случаях, добавьте содержимое в родительский контейнер, например так:

function ajaxReturn(data) {
   var parent = $("<div />").append(data);
   alert(parent.filter('.event-detail').length); //<-- Returns 1
   alert(parent.find('.copy').length); //<-- Returns 1
}
5 голосов
/ 04 ноября 2010

Это ожидаемое поведение.

  • Вы ищете .event-detail в вашем div и там его нет
  • Вы ищете .copy под своим div и есть один.
0 голосов
/ 04 ноября 2010

Это зависит от того, что передается в функцию ajaxReturn.то есть, что data содержит?

Если он содержит указанный вами HTML-код, то это ожидаемое поведение.Это связано с тем, что метод .find() ищет в текущего контекста, не включая его.Если в вашем примере внешний div - это внешний div в data, то .find() будет искать .event-detail внутри этого div.

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