Быстрая версия: Вы можете обойти вашу текущую проблему, убедившись, что текстовый элемент не находится между двумя и в корне, как это:
function findself(sel, html) {
var h = $("<div />").append(html);
return h.is(sel) ? h.find(sel).add(h) : h.find(sel);
}
Вы можете проверить это здесь .
Объяснение: Это ошибка в ядре jQuery, на которую она похожа. Он обнаруживает ее как строку HTML из-за открывающих / закрывающих тегов, но это не отдельный элемент. Это 3 узла, один из которых является текстом, из-за этого неправильного обнаружения он неправильно обрабатывает его как строку элемента, а не как коллекцию дочерних элементов, например:
jQuery.filter('[rel="t"]', $('<span>foo</span>some text')); //works
jQuery.filter('[rel="t"]', $('<div><span>foo</span>some text</div>')); //works
jQuery.filter('[rel="t"]', $('<span>foo</span>text<div>xx</div>')); //fails
Так что в настоящее время jquery.filter()
(который используется .is()
) не работает с текстовым узлом в середине.