jQuery过滤AJAX数据然后替换数据

时间:2010-07-14 12:53:37

标签: ajax jquery

我在jQuery中通过AJAX调用页面。

需要过滤这些页面的内容,以便我只获取某个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 个答案:

答案 0 :(得分:2)

认为你的问题可能在这里:

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

.filter()只会在响应中找到顶级元素(如果它是一个页面,那是<html>,并且不会有任何结果)。 .find()寻找后代元素。另请注意,如果您有多个.Section1元素,这将不会按预期运行,并且会有一些重复。

答案 1 :(得分: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本身可以使用load函数过滤选择器。 http://api.jquery.com/load/但是这有一些限制,例如无法过滤html,head或body标签。这就是上述方法更安全的原因。