Могу ли я использовать селектора jQuery для строки HTML, которая не привязана к DOM?
Итак, если у меня есть переменная типа
var ht = "<body><p>Paragraph Here</p></body>"
Если он был прикреплен к DOM, я мог бы просто сделать это, чтобы получить текст
$('p').text();
Но могу ли я сделать такой же выбор только по переменной, которая еще не привязана к dom?
Ответы
Ответ 1
Объект jQuery возьмет HTML и внесет его в структуру DOM для дальнейшего запроса, вы можете передать его непосредственно для создания объекта или использовать его в качестве контекста, если хотите просто запросить его.
Изменить: По какой-то причине кажется необходимым обернуть его в DIV, если он уже не находится внутри одного в этом примере. Дополнительную информацию см. В документации объекта jQuery в этом методе.
См. тестовую структуру для системы по адресу: http://jsfiddle.net/hUMqU/
var ht = "<body><p>Paragraph Here</p></body>";
$('<div>' + ht + '</div>').find('p').text();
или как контекст:
var ht = "<body><p>Paragraph Here</p></body>";
$('p', '<div>' + ht + '</div>').text();
Ответ 2
Нет тайны. Выбор
$('p')
выбирает p
элементы документа, подразумеваемый контекст.
Но элементы p
в:
var ht = "<body><p>Paragraph Here</p></body>";
не прикреплены к документу (DOM), поэтому он ОК, если они не выбраны.
К счастью, функция $()
имеет второй аргумент, контекст, который должен использоваться здесь, например:
$('p', $(ht).context)
Ответ 3
Просто оберните свою HTML-строку в объект jQuery, а затем вы можете запускать селектора jQuery:
var htmlString = "<body><p>Paragraph Here</p></body>";
var elements = $(htmlString);
var p = elements.filter('p').text();
console.log(p);
//=> Paragraph Here
Рабочая демонстрация здесь.