我在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);
}
});
});
答案 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标签。这就是上述方法更安全的原因。