我一直在试图获取一个HTML文件,并将其作为一个jQuery对象分配给一个变量。无济于事。我不确定Stack Snippets是否允许GET请求,所以这里也是JSFiddle link。我的HTML有什么问题,jQuery不解析它?
var html = '<!DOCTYPE html><html lang="en"><head><title>Template</title></head><body itemscope itemtype="http://schema.org/WebPage"><main><header itemscope itemtype="http://schema.org/Country" itemprop="about"><h1 itemprop="name">Dummy heading</h1><p><span class="capital" title="Capital" itemprop="containsPlace"></span><span title="Dummy title" itemprop="additionalProperty" itemscope itemtype="http://schema.org/PropertyValue"><meta itemprop="name" content="Member of the EU since"><span itemprop="value" class="member-since">Dummy year</span></span></p></header><div itemprop="mainEntity" itemscope itemtype="http://schema.org/ItemList"><meta itemprop="description" content=""><article class="recipe loading" itemprop="itemListElement" itemscope itemtype="http://schema.org/Recipe"><meta itemprop="position" content=""><aside class="media"><div class="img-gallery" itemscope itemtype="http://schema.org/ImageGallery"></div><div itemscope itemtype="http://schema.org/VideoObject" class="youtube"><a itemprop="contentUrl" href="#" title=""><meta itemprop="name" content=""><meta itemprop="uploadDate" content=""><meta itemprop="description" content=""><img itemprop="thumbnailUrl" src="#" alt=""></a><div class="youtube-player"></div></div></aside><div class="text"><div class="wiki-text"><h1 itemprop="name">Dummy heading</h1><p itemprop="description"></p><p class="read-more">For more information about <span class="recipe-name"></span>, read the <a href="#" title="" itemprop="sameAs">Wiki</a>.</p></div><div class="rating" itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">Rated <span itemprop="ratingValue">3.5</span>/5 based on <span itemprop="reviewCount">11</span> customer reviews</div><div class="cooking"><h2>Bake it yourself!</h2><div><meta itemprop="cookTime" content=""><span>Bake time: <span class="bake-time"></span></span></div><div class="ingredients-wrapper"><h3>Ingredients <small>for <span itemprop="recipeYield"></span></small></h3><div class="ingredients"><h4>Dummy heading</h4><ul></ul></div></div><div class="how-to"><h3>Steps</h3><ol></ol></div></div></div></article></div></main></body></html>';
$.ajax({
type: 'post',
url: "/echo/html/",
dataType: "html",
data: {
html: html,
delay: 1
}
}).done(function(data) {
// string
\t console.log(data);
// array
console.log($(data));
// array
console.log($.parseHTML(data));
// array
console.log($($.parseHTML(data)));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
的HTML是有效的。然而,我不能把它放在一个物体上。正如所料,返回的数据是一个字符串。但是,当我尝试使用$.parseHTML()
将该字符串解析为HTML或将其放入jQuery选择器$()
甚至尝试使用这两个字符串时,我总是得到相同的结果:包含标题和主元素的数组。
因此,一些如何jQuery仍然解析它,并使元素在头部和身体的一个元素的数组。但是为什么?我该如何弥补这一点,并将其转换为jQuery对象?我只对身体的内容感兴趣。
有a similar question,但接受的解决方案并没有帮助,因为它进入了JSFiddle,我也在XAMPP本地遇到这个问题。
嗯,有没有什么办法可以做到这一点,而无需首先将元素添加到DOM?问题是我想将内容加载到内存中,对其进行一些修改(克隆,分离,整个交易),然后将其添加到DOM。在内存中,因为这应该比做DOM修改更快。 –
不是我所知道的。事情就是这样被正确解析。否则,你可以在你的字符串上运行一些'jQuery'技巧,但它不是'DOM'元素,所以并不是所有的东西都可用。例如,对'$(data)'运行'.find()'并按类选择将会工作,而选择标记不会,因为它不是DOM。这是一个字符串。通过上述方法,您不仅可以等待加载ajax,还可以正确加载生成的DOM(以防万一它具有一些DOM操作脚本)。 –
我明白了。聪明。所以,最好的想法可能是将它附加到html/body,然后在VAR中执行'.detach()',将解析的内容有效地放回到内存中,删除虚拟对象。操作VAR,并将VAR添加回DOM? –