У меня есть большая HTML-строка, содержащая несколько дочерних узлов.
Можно ли построить объект JQuery DOM, используя эту строку?
Я пробовал, $(string)
но он возвращает только массив, содержащий все отдельные узлы.
Я пытаюсь получить элемент, для которого я могу использовать функцию .find ().
javascript
jquery
html
user1033619
источник
источник
Ответы:
Обновить:
Начиная с jQuery 1.8, мы можем использовать $ .parseHTML , который будет анализировать строку HTML на массив узлов DOM. например:
var dom_nodes = $($.parseHTML('<div><input type="text" value="val" /></div>')); alert( dom_nodes.find('input').val() );
ДЕМО
var string = '<div><input type="text" value="val" /></div>'; $('<div/>').html(string).contents();
ДЕМО
Что происходит в этом коде:
$('<div/>')
это подделка<div>
, которой нет в DOM$('<div/>').html(string)
добавляетсяstring
в эту подделку<div>
как дети.contents()
извлекает дочерние элементы этой подделки<div>
как объект jQueryЕсли вы хотите
.find()
поработать, попробуйте следующее:var string = '<div><input type="text" value="val" /></div>', object = $('<div/>').html(string).contents(); alert( object.find('input').val() );
ДЕМО
источник
.find()
операцию, посмотрите демоstring = '<input type="text" value="val" />'
$("<div/>")
, то почему нельзя$(string)
?Начиная с jQuery 1.8 вы можете просто использовать parseHtml для создания объекта jQuery:
var myString = "<div>Some stuff<div>Some more stuff<span id='theAnswer'>The stuff I am looking for</span></div></div>"; var $jQueryObject = $($.parseHTML(myString));
Я создал JSFidle, демонстрирующий это: http://jsfiddle.net/MCSyr/2/
Он анализирует произвольную строку HTML в объект jQuery и использует find для отображения результата в div.
источник
var jQueryObject = $('<div></div>').html( string ).children();
Это создает фиктивный объект jQuery, в который вы можете поместить строку как HTML. Тогда вы получите только детей.
источник
.filter()
вместо.find()
.Также есть отличная библиотека под названием cheerio, разработанная специально для этого.
var cheerio = require('cheerio'), $ = cheerio.load('<h2 class="title">Hello world</h2>'); $('h2.title').text('Hello there!'); $('h2').addClass('welcome'); $.html(); //=> <h2 class="title welcome">Hello there!</h2>
источник
Я использую следующие шаблоны HTML:
$(".main").empty(); var _template = '<p id="myelement">Your HTML Code</p>'; var template = $.parseHTML(_template); var final = $(template).find("#myelement"); $(".main").append(final.html());
Примечание: если вы используете jQuery
источник
причина, по которой $ (string) не работает, заключается в том, что jquery не находит html-контент между $ (). Поэтому вам нужно сначала разобрать его на html. если у вас есть переменная, в которой вы проанализировали html. затем вы можете использовать $ (string) и использовать все функции, доступные для объекта
источник
Вы можете попробовать что-то вроде ниже
$($.parseHTML(<<table html string variable here>>)).find("td:contains('<<some text to find>>')").first().prev().text();
источник