【发布时间】:2019-07-11 17:07:50
【问题描述】:
我正在使用 QUnit 编写测试,并使用 $.ajax() 为我本地运行的开发站点中的一些测试提取 HTML:
add_elements = function(location, selector) {
$.ajax(location, {async: false}).done(function(data) {
stor.$els = $(selector, $.parseHTML(data));
stor.$els.appendTo($('body'));
})
}
在某个位置使用此函数,我得到以下data 传递给我的.done() 回调:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Home</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/static/css/bootstrap.min.css" rel="stylesheet" media="screen">
</head>
<body>
<div id="app-container" class="container-fluid">
<div class="page-header">
<h1>
<a href="/">Home</a>
<small>Text</small>
</h1>
</div>
<div id="hero-units" class="carousel-inner slide">
<div class="hero-unit home item active">
<h1>
Text text text
</h1>
<p>
More text!
</p>
<div id="app-nav">
<a id="lets-go" class="btn btn-primary btn-large nav-forward" href="/what-up/">
Let's go
</a>
</div>
</div>
</div>
</div>
<script src="/static/js/jquery.js"></script>
<script src="/static/js/underscore.js"></script>
<script src="/static/js/backbone.js"></script>
<script src="/static/js/bootstrap.js"></script>
<script src="/static/js/site-fiddle.js"></script>
<script src="/static/js/site.js"></script>
</body>
</html>
如果selector 是#hero-units 或.hero-unit,一切正常,但如果selector 是#app-container,$(selector, $.parseHTML(data)) 将不返回任何内容!我想要一个 jQuery 对象作为 div#app-container 元素。
这就是要我的命:
-
$.parseHTML(data)确实 包含div#app-container元素。只是$.parseHTML(data)[7]。 - 然而,
$('#app-container', $.parseHTML(data))是一个空数组。 -
$('div', $.parseHTML(data))包括div#app-container内部的所有divs,但不包括div#app-container本身。
这里发生了什么?似乎发生的事情是$ 没有查看$.parseHTML(data) 或$($.parseHTML(data))) 返回的任何顶级元素,而只是查看它们的子元素。
如何从这个$.parseHTML(data) 获取div#app-container 的jQuery 对象?
回答
$(selector, $.parseHTML(data)) 样式的查找使用 $.find。因为我正在寻找这个 jQuery 对象中的顶级元素,所以我应该使用 $.filter 代替。瞧。
【问题讨论】:
-
感谢您对
filter的更新,这比下面的答案要好得多。虽然这也行得通:) -
您能否提供一个示例,说明
$.filter正在努力从$.parseHTML获取输出的最外层节点?如何将 parseHTML 的输出传递给$.filter?它只接受一个参数。
标签: javascript jquery