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

Javascript 将html解析为jQuery对象的正确方法,javascript,jquery,Javascript,Jquery,我想将一个html字符串解析为jQuery对象,然后按ID查找一个元素 我试过下面三种方法,但只有最后一种有效。我不知道为什么其他的不起作用 var html = "<html><body><div id='main'></div></body></html>"; // Not work, return 0 console.log($(html).find('#main').length); // Not work, r

我想将一个html字符串解析为jQuery对象,然后按ID查找一个元素

我试过下面三种方法,但只有最后一种有效。我不知道为什么其他的不起作用

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); 
var html=”“;
//不工作,返回0
log($(html).find('#main').length);
//不工作,返回0
log($($.parseHTML(html)).find('#main').length);
//工作,返回1
console.log($(“”).html(html).find('#main').length);
以下是示例: 它是:

在传递复杂的HTML时,某些浏览器可能无法生成完全复制所提供HTML源的DOM。如前所述,jQuery使用浏览器“s.innerHTML属性来解析传递的HTML并将其插入当前文档。在此过程中,一些浏览器会过滤掉某些元素,如
元素。因此,插入的元素可能无法代表传递的原始字符串

因此,
$(html)
被缩减为
。您可以通过记录
$(html)[0].outerHTML
来验证这一点


因此,如果不包装它,就无法使用
查找
,这就是您要做的。

另一种方法是-

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

console.log(myTestDiv.querySelector('div#main'));
var myTestDiv=document.createElement('div');
var mystr='';
myTestDiv.innerHTML=mystr;
log(myTestDiv.querySelector('div#main');

$(html)==
这就是为什么你不能使用
.find()
来查找它。你也可以将字符串当作XML
控制台.log($($.parseXML(html)).find('#main').length)
但是最好避免不必要的包装。我很困惑。。。在我看来,@YuryTarabanko在这里给出了正确的答案。有一个类似的问题,使用
parseXML
代替pf
parseHTML
有帮助。作为一种解决方法,有一些类似于
findAll
的东西。