简体   繁体   English

正确的方法将html解析为jQuery对象

[英]The right way parse html to jQuery object

I want to parse a html string to jQuery object then find an element by ID. 我想将一个html字符串解析为jQuery对象,然后按ID查找一个元素。

I tried 3 ways bellow, but only the last works. 我尝试了3种方法,但只有最后一种方法。 I don't know why the others not works? 我不知道为什么其他人不行?

var html = "<html><body><div id='main'></div></body></html>";

// Not work, return 0
console.log($(html).find('#main').length); 
// Not work, return 0
console.log($($.parseHTML(html)).find('#main').length); 
// Works, return 1
console.log($("<html/>").html(html).find('#main').length); 

Here is the sample: http://jsfiddle.net/nbyofkam/2/ 以下是示例: http//jsfiddle.net/nbyofkam/2/

It's documented : 记录在案

When passing in complex HTML, some browsers may not generate a DOM that exactly replicates the HTML source provided. 传递复杂的HTML时,某些浏览器可能无法生成完全复制所提供的HTML源的DOM。 As mentioned, jQuery uses the browser"s .innerHTML property to parse the passed HTML and insert it into the current document. During this process, some browsers filter out certain elements such as <html> , <title> , or <head> elements. As a result, the elements inserted may not be representative of the original string passed. 如上所述,jQuery使用浏览器的.innerHTML属性来解析传递的HTML并将其插入到当前文档中。在此过程中,某些浏览器会过滤掉某些元素,例如<html><title><head>元素结果,插入的元素可能无法代表传递的原始字符串。

As a result, $(html) is reduced to "<div id="main"></div>" . 结果, $(html)减少为"<div id="main"></div>" You can verify that by logging $(html)[0].outerHTML . 您可以通过记录$(html)[0].outerHTML

So you can't use find without wrapping it, which is what you do. 所以你不能find没有包装的情况下使用find ,这就是你所做的。

An alternate way to do this - 另一种方法 -

var myTestDiv = document.createElement('div');
var mystr = '<div id="main"></div>';
myTestDiv.innerHTML = mystr;

console.log(myTestDiv.querySelector('div#main'));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM