从完整的HTML文档创建jQuery DOM对象
我在将包含整个HTML文档的字符串转换为DOM对象时遇到问题,在DOM对象中我可以使用jQuery从完整的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似乎
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你的链接让我找到了解决方案。