2010-07-14 103 views
2

我在jQuery中通過AJAX調用頁面。jQuery過濾AJAX數據,然後replaceWith數據

這些頁面的內容需要過濾,以便我只抓取某個DIV類。在這個例子中'Section1'。

此過濾的數據需要替換同一類DIV中當前頁面上的相同數據。

我現在有這一點,但它是不是真的爲我工作:

$("#dialog_select").live('change', function() { 

    //set the select value 
    var $optionVal = $(this).val(); 

    //$(this).log($optionVal); 

    $.ajax({ 
     type: "GET", 
     url: $optionVal, 
     dataType: "html", 
     cache: false, 
     success: function(data) { 

      var $filteredData = $(data).filter('.Section1'); 

      $('.Section1').replaceWith($filteredData); 
     }, 
     error: function(xhr, ajaxOptions, thrownError) { 
      alert(xhr.status); 
      alert(thrownError); 
     } 
    }); 

}); 
+2

'filter()'只會返回**頂層**元素,它們是否不包含在響應中的任何內容中? – 2010-07-14 12:58:45

回答

2

認爲你的問題很可能在這裏:

var $filteredData = $(data).find('.Section1'); 
$('.Section1').replaceWith($filteredData); 

.filter()只發現在頂級元素響應(如果它是一個頁面,那是<html>,並且不會有任何結果)。 .find()尋找decendant元素。另請注意,如果您有多個.Section1元素,則這不會像預期的那樣運行,並且會發生重複。

0

這是一件棘手的事情,我建議將數據放入DOMParser或document.implementation.createDocument或MSXML。

if (window.DOMParser) { 
    parser=new DOMParser(); 
    xmlDoc=parser.parseFromString(text,"text/xml"); 
} 
else { 
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
    xmlDoc.async="false"; 
    xmlDoc.loadXML(text); 
} 

是一個基本的代碼示例。 jQuery本身可以使用加載函數對選擇器進行過濾。然而,這有一些限制,例如不能過濾html,head或body標籤。這就是爲什麼上述方法更安全。

+2

他並不試圖過濾任何這些元素,只是標準的「」過濾器......看起來這是過於複雜,至少對我來說。 – 2010-07-14 13:05:50

+0

同意。 試過你的建議尼克,它運作得很好。 雖然對於otehr的觀點總是很有吸引力:) – RyanP13 2010-07-14 13:10:59

+0

尼克唯一的問題是如果回來的內容是一個完整的HTML頁面。 和中的所有元素將處於相同的級別,並且可能導致一些大規模混淆並導致意想不到的結果。 我的回答並沒有給出簡單。在這種情況下,你的答案很好。 – tbranyen 2010-07-14 18:49:58