The right way parse html to jQuery object

I want to parse a html string to jQuery object then find an element by ID.

I tried 3 ways bellow, but only the last works. 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/


It's documented :

When passing in complex HTML, some browsers may not generate a DOM that exactly replicates the HTML source provided. 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.

As a result, $(html) is reduced to "<div id="main"></div>" . You can verify that by logging $(html)[0].outerHTML .

So you can't use find without wrapping it, which is what you do.


另一种方法来做到这一点 -

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

console.log(myTestDiv.querySelector('div#main'));
链接地址: http://www.djcxy.com/p/74094.html

上一篇: 显示来自用户输入的部分数组值

下一篇: 正确的方法解析html到jQuery对象