Отредактировано для ясности.
За кулисами, используя ядро jQuery (селектор, контекст) будет выполнять .find()
.Чтение документов в .find () говорит о том, что он будет искать дочерние элементы текущих элементов.
Это означает, что ваш звонок будет выполнять следующее:
Возьмите <div class="media">abc</div>
детей - 0 детей - и найдите .media
0 результатов.
Возьмите <div class="media">efg</div>
детей - 0 детей - и найдите .media
0 результатов.
Возьмите <div class="nvid">qwr</div>
детей - 0 детей - и найдите .media
0 результатов.
Чтобы сделать это DOM-способом, оберните его в div и найдите:
var html = '<div class="media">abc</div>' +
'<div class="media">efg</div>' +
'<div class="nvid">qwr</div>';
var obj = $(html);
//this fails:
$('div.media',obj).each(function(){console.log("found with jquery object");});
// this works as a single DOM object
var wrap = $('<div/>').append(obj).eq(0);
$('div.media',wrap).each(function(){console.log("found with DOM object");});
Причина, по которой это работает, заключается в том, что мы вставляем ваш html как дочерний элемент и выполняем поиск по родительскому элементу.контейнер (обертка), и он получает 3 дочерних элементов, и он соответствует 2 из этих дочерних элементов.
Чтобы сделать это способом filter()
и вернуть объект NEW jquery только с этими элементами: ссылка на фильтр документов
obj.filter('.media').each(function(){console.log("found with Filter");});
На основании вашего комментария вы можете сделать что-то вроде:
$(html).filter('.media').each(function(){
var myDiv = $(this);
// do stuff with myDiv.html();
});
Здесь вы можете оформить jsfiddle - немного устарело.