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

use*_*619 133 html javascript jquery

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

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

我试过$(string)但它只返回一个包含所有单个节点的数组.

试着获得一个我可以使用.find()函数的元素.

the*_*dox 192

更新:

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

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

alert( dom_nodes.find('input').val() );
Run Code Online (Sandbox Code Playgroud)

DEMO


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

$('<div/>').html(string).contents();
Run Code Online (Sandbox Code Playgroud)

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() );
Run Code Online (Sandbox Code Playgroud)

DEMO

  • 使用更复杂的HTML我需要删除.contents才能使其工作.https://jsfiddle.net/h45y2L7v/ (2认同)

kip*_*ney 117

从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));
Run Code Online (Sandbox Code Playgroud)

我已经创建了一个JSFidle来演示这个:http://jsfiddle.net/MCSyr/2/

它将任意HTML字符串解析为jQuery对象,并使用find在div中显示结果.

  • 我发现这个答案要好得多,因为这不必使用ghost div元素.$ .parseHtml ftw. (10认同)
  • 值得一提的是,在**jQuery 1.8中添加了parseHTML** (8认同)
  • 这个答案对我来说不起作用,然后我想要$ jQueryObject.find(),我认为因为它没有被添加到dom那一点. (2认同)

Flo*_*ine 12

var jQueryObject = $('<div></div>').html( string ).children();
Run Code Online (Sandbox Code Playgroud)

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

  • @ user1033619你必须使用`.filter()`而不是`.find()`. (3认同)
  • 香港专业教育学院尝试过这个,但它不适用于我必须在以后使用的.find()函数. (2认同)