我有以下脚本,它显示从服务器端页面返回到客户端页面的数据:
function getResults() {
var search;
search = $(".txtSearch").val();
$.ajax({
url: 'search.aspx',
type: 'POST',
data: { strPhrase:search },
error: function(xhr, status, error)
success: function(results)
{
$("#ResultsContainer").empty();
$("#ResultsContainer").append(results);
}
});
}
是否可以检查在追加结果时返回的结果并对其进行更改?
例如,假设返回的结果是html,如下所示:
<div><a href="link1.xls">link 1</a></div>
<div><a href="link2.xls">link 2</a></div>
<div><a href="link3.doc">link 3</a></div>
<div><a href="link4.xls">link 4</a></div>
是否可以检查链接中的.doc并删除该特定链接周围的完整div,只留下以下内容?
<div><a href="link1.xls">link 1</a></div>
<div><a href="link2.xls">link 2</a></div>
<div><a href="link4.xls">link 4</a></div>
答案 0 :(得分:5)
是的,试试这个:
success: function(results)
{
var $results = $(results);
$results.find('a[href$=doc]').parent().remove();
$("#ResultsContainer").empty().append($results);
}
这将results
放在jQuery对象中,将String转换为DOM元素。
然后,它使用jQuery's .find()
method来查找href attribute ends with <a>
所在的嵌套doc
元素。
然后遍历其.parent()
元素和calls .remove()
。
请注意,the .append()
method会附加已修改的$results
。不是原始的results
字符串。
答案 1 :(得分:0)
我自己没有使用它,但是jQuery.ajax使用dataFilter
成员,这是一个回调来在success
处理程序看到它之前清理数据。
答案 2 :(得分:0)
对于性能问题,如果你的aspx页面返回一个没有“doc”链接的html片段会更好,即使你以后可以过滤ajax回调。
如果你发送一个包含url的简单对象(到非doc文件)的json会更好,因为你有很多冗余代码。
答案 3 :(得分:0)
如果通过
正在追加
你的意思是当他们从服务器发送到客户端时我会说可能不是(或不是jQuery)。 Prototype有一个回调onInteractive - (Not guaranteed) Triggered whenever the requester receives a part of the response (but not the final part), should it be sent in several packets.
可能会这样做,但即便如此,也很难处理块。
如果您说您可以控制发件人,则应实施分页系统:在第一次请求时,服务器脚本会返回10个结果和总页数。您处理这些结果(如果您愿意显示它们)然后请求下一页,依此类推。
此外,您应该通过向脚本发送过滤条件来对服务器进行过滤(如果可能的话)。