在追加时编辑结果?

时间:2010-10-07 15:56:52

标签: javascript jquery

我有以下脚本,它显示从服务器端页面返回到客户端页面的数据:

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>

4 个答案:

答案 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处理程序看到它之前清理数据。

查看文档 - http://api.jquery.com/jQuery.ajax/

答案 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个结果和总页数。您处理这些结果(如果您愿意显示它们)然后请求下一页,依此类推。

此外,您应该通过向脚本发送过滤条件来对服务器进行过滤(如果可能的话)。