从完整的HTML文档创建jQuery DOM对象

从完整的HTML文档创建jQuery DOM对象,jquery,html,Jquery,Html,我在将包含整个HTML文档的字符串转换为DOM对象时遇到问题,在DOM对象中我可以使用jQueryfind()。输入以DOCTYPE字符串开头,位于变量data中 这项工作可以找到十几个tr元素: var dummy0 = $(data).find('tr'); 这不起作用,尽管肯定存在h1元素: var dummy1 = $(data).find('h1'); 如果我这样做是为了检查数据对象: var dummy2 = $(data); 在Firefox F12调试器中,dummy2似乎

我在将包含整个HTML文档的字符串转换为DOM对象时遇到问题,在DOM对象中我可以使用jQuery
find()
。输入以DOCTYPE字符串开头,位于变量
data

这项工作可以找到十几个
tr
元素:

var dummy0 = $(data).find('tr');
这不起作用,尽管肯定存在
h1
元素:

var dummy1 = $(data).find('h1');
如果我这样做是为了检查
数据
对象:

var dummy2 = $(data);
在Firefox F12调试器中,
dummy2
似乎是以下对象的数组:

#text
title
#text
h1
#text
table
#text
因此,
find('tr')
之所以有效,是因为它在
表中的数组元素中找到了,而
find('h1')
却找不到,因为它不在DOM中,而是
数据的数组元素之一

我尝试了使用的技巧,但结果是完全相同的数组,而不是单个DOM树

我还尝试了
$.parseHTML(数据)
,结果相同

有人能帮我解释一下这一切是怎么回事吗?输入是一个字符串,正好包含一个html元素,但被解析为一组元素的数组。
元素在哪里

然后,因为我需要
h1
的内容,所以如何获取可以使用
find
搜索所有元素(包括
h1
)的DOM对象

还是我被迫忘记DOM树,只检查数组元素的
h1


更新:

我创建了一个小型独立测试用例:

<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
    <h1>Test</h1>
    <script>
        var sHtml = "<!DOCTYPE html>\n<html><head><title>test</title></head>\n<body><h1>Test</h1><table><tr><td>Abc</td></tr></table></body></html>";
        var dHtml = $(sHtml);
        var h1 = dHtml.find('h1');
        var td = dHtml.find('td');
        alert('h1: ' + (h1.length == 0 ? 'not found' : h1.text()) + //output: h1: not found
            ' td: ' + (td.length == 0 ? 'not found' : td.text()) +  //output: td: Abc
            ' dHtml.length: ' + dHtml.length);                      //output: dHtml.length: 5
    </script>
</body>
</html>

试验
试验
var sHtml=“\ntest\nTestAbc”;
var dHtml=$(sHtml);
var h1=dHtml.find('h1');
var td=dHtml.find('td');
警报('h1:'+(h1.length==0?):h1.text())+//输出:h1:未找到
未找到“td:”+(td.length==0?):td.text())+//输出:td:Abc
“dHtml.length:”+dHtml.length)//输出:dHtml.length:5

似乎
dHtml
数组值中的两个
#text
条目对应于两个换行符,一个在DocType之后,另一个在
head
标记之后。仍然想知道为什么dHtml中没有一个DOM条目,而是三个DOM条目。

显然,我没有在问题中提到的链接中尝试足够的技巧,输入对于小jQuery解析器来说也不太复杂,因为它可以很好地处理这一修改后的行:

var dHtml = $('<div></div>').html(sHtml);
var-dHtml=$('').html(sHtml);

这会将整个头部和身体部位放在一个顶级div中。输入字符串中的DOCTYPE行没有问题。jQuery find()可以查找所有内容。

jQuery在解析如此完整的文档时遇到问题。您可以先将输入HTML剥离为仅包含正文内容,然后仅解析正文内容吗?否则,我建议您首先使用适当的解析器,而不是让jQuery来完成这一部分@CBroe你的链接让我找到了解决方案。