从大的HTML字符串创建jQuery对象

时间:2012-06-15 09:07:04

标签: javascript jquery html

我有一个包含多个子节点的大HTML字符串。

是否可以使用此字符串构建 jQuery DOM对象?

我尝试了$(string),但它只返回一个包含所有单个节点的数组。

尝试获取一个可以使用.find()函数的元素。

7 个答案:

答案 0 :(得分:175)

更新

从jQuery 1.8开始,我们可以使用$.parseHTML,它将HTML字符串解析为DOM节点数组。例如:

var dom_nodes = $($.parseHTML('<div><input type="text" value="val" /></div>'));

alert( dom_nodes.find('input').val() );

DEMO


var string = '<div><input type="text" value="val" /></div>';

$('<div/>').html(string).contents();

<强> DEMO

此代码中发生了什么:

  • $('<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() );

<强> DEMO

答案 1 :(得分:114)

从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中显示结果。

答案 2 :(得分:12)

var jQueryObject = $('<div></div>').html( string ).children();

这将创建一个虚拟jQuery对象,您可以在其中将字符串作为HTML。然后,你只接受孩子们。

答案 3 :(得分:2)

还有一个名为cheerio的伟大图书馆,专为此设计。

  

专为服务器设计的核心jQuery的快速,灵活和精益实现。

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>

答案 4 :(得分:1)

我在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

答案 5 :(得分:1)

$(字符串)不起作用的原因是因为jquery没有在$()之间找到html内容。因此,您需要先将其解析为html。 一旦你有一个你已经解析了html的变量。然后,您可以使用$(字符串)并使用对象上可用的所有函数

答案 6 :(得分:0)

您可以尝试以下类似操作

$($.parseHTML(<<table html string variable here>>)).find("td:contains('<<some text to find>>')").first().prev().text();