JQuery найти не работает - PullRequest
4 голосов
/ 16 августа 2010

У меня есть DocumentFragment, хранящийся в «selectedContents», и я пытаюсь найти в нем элементы «span» с помощью jQuery.У него есть два дочерних узла, где первый является текстовым, а второй - span.

Когда я пытаюсь $(selectedContents.childNodes).find('span'), он возвращает пустой набор!

Однако, когдаЯ печатаю "$(selectedContents.childNodes)[1].localName" с надписью "span"!

Что-то не так в моей находке?Пожалуйста, помогите.

Спасибо
Srikanth

Ответы [ 5 ]

10 голосов
/ 16 августа 2010

Поскольку вы передаете коллекцию элементов, вам нужно использовать .filter() для фильтрации <span> из набора.

$(selectedContents.childNodes).filter('span');

Метод .find() используется для поиска потомков .


РЕДАКТИРОВАТЬ: Обратите внимание, что ваш подход передачи childNodesв объект JQuery правильно.Вы не можете передать documentFragment, как некоторые предполагают.

Вот пример для иллюстрации: http://jsfiddle.net/P8nur/

2 голосов
/ 16 августа 2010

С помощью $(selectedContents.childNodes) вы уже выбрали все элементы из selectedContents. Таким образом, выполнение find выполнит метод для первого элемента этого селектора.

Попробуйте это:

$(selectedContents).find('span')
0 голосов
/ 17 августа 2010

Я пытался $(selectedContents).find('span'), но это привело к пустому набору! А также filter, что тоже привело к пустому набору!

Однако $(selectedContents).children('span') привело то, что я хотел!

Как сказал patrick_dw, вероятно, jQuery не работает должным образом с DocumentFragment!

Спасибо всем за помощь.

0 голосов
/ 16 августа 2010

Дело в том, что $(selectedContents) возвращает магическую вещь jQuery, а $(selectedContents.childNodes) возвращает что-то вроде уродливого массива.Таким образом, для вашего массива нет функции find().

Используйте $(selectedContents).find('span') или $(selectedContents.childNodes).filter('span'), как сказали @justkt и @patrick dw.

0 голосов
/ 16 августа 2010

Попробуйте просто

$(selectedContents).find('span');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...