我通過$.ajax()
加載網頁並插入部分結果到頁面的相應部分從HTML文本腳本元素:查詢使用jQuery
$.ajax({
url: '/whole_page.html',
success: function (data, status, xhr) {
$result = $(xhr.responseText);
$('#menu').html($('#menu', $result).html());
$('#content').html($('#content', $result).html());
}
});
工程就像一個魅力,但我已經遇到了問題。
現在我的頁面包含一些特定於頁面的JS,當結果被獲取並插入時,它們必須執行。據我所知,jQuery不會返回script
元素,如果你從HTML文本構建一個jQuery對象並查詢它(我已經made a fiddle來演示)。所以,我沒有辦法選擇性地只通過jQuery插入我想要的腳本。
因此,我似乎必須從自己的回覆文本中提取script
元素。基本上,我正在尋找正確的方法來做到這一點。這是我到目前爲止:
function pullScripts(text) {
var frag = document.createDocumentFragment()
, div = document.createElement('div')
, scriptElements
;
// This is roughly how jQuery finds the scripts when cleaning text
frag.appendChild(div);
div.innerHTML = text;
scriptElements = div.getElementsByClassName('class-for-scripts-that-we-want');
$('head').append(scriptElements);
}
這工作得很好,雖然我還沒有在任何蹩腳的瀏覽器上測試過它。無論如何,複製jQuery的這些基本功能只是爲了避免其功能之一(特殊的script
處理)而感到不舒服。從小提琴中可以看出,jQuery對象實際上包含script
s,但它不會像.html()
或.get()
那樣返回它們。 我是否錯過了一些明顯的做法?
注:一旦jQuery的內部parseHTML
功能暴露這整個主題將是毫無意義
注2:我也看到了Trying to select script tags from a jQuery ajax get response但接受的答案是「你不是可以」,其次是「使用正則表達式「。兩者都不能令人滿意
只需要注意,傳入成功回調的第一個參數是來自請求的數據,而不是事件 – Austin 2012-07-09 17:34:28
$ .load()是否解決此問題? – Christophe 2012-07-09 17:35:22
@奧斯汀,謝謝。我徒手打字,知道我會搞砸了。 Christophe:從某種意義上說,如果你在URL中添加一個選擇器(就像我需要使用它的那樣),你會遇到上述同樣的問題。 – bkconrad 2012-07-09 17:41:04