我正在寫與QUnit測試和使用$.ajax()
在HTML中拉了一段從dev的現場測試對我的本地運行:的jQuery()沒有找到在jQuery.parseHTML元素()結果
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
,則不返回任何內容!我想爲div#app-container
元素設置一個jQuery
對象。
這裏是什麼殺死我:
$.parseHTML(data)
確實包含div#app-container
元素。這只是$.parseHTML(data)[7]
。- 然而,
$('#app-container', $.parseHTML(data))
是一個空數組。 $('div', $.parseHTML(data))
包括div#app-container
內部的所有div
,但不包括div#app-container
本身。
這是怎麼回事?看來發生了什麼事情是$
沒有看到由$.parseHTML(data)
或$($.parseHTML(data)))
返回的任何頂級元素,而只是他們的子女。
如何從$.parseHTML(data)
獲得jQuery
對象div#app-container
?
ANSWER
的$(selector, $.parseHTML(data))
式的查找使用$.find
。因爲我正在尋找這個jQuery對象中最高層的元素,所以我應該使用$.filter
。瞧。
感謝您的更新比下面的答案'filter'漂亮多得到它。儘管這也可以起作用:) – MMachinegun 2014-06-02 15:00:48
您能否提供一個'$ .filter'的示例來獲取'$ .parseHTML'輸出的最外層節點?你如何將parseHTML的輸出傳遞給'$ .filter'?它只接受一個參數。 – Ade 2014-11-20 17:33:17