How do I filter the returned data from jQuery.ajax()? How do I filter the returned data from jQuery.ajax()? ajax ajax

How do I filter the returned data from jQuery.ajax()?


The use of filter() vs. find() depends on the structure of your retrieved HTML page. For example, if this is the retrieved page:

<!DOCTYPE html><html><head>    <title>Foo</title></head><body>    <div id="wrap">        <div id="header">            <h1>Foo</h1>        </div>        <div id="body"> content </div>    </div>    <div id="tooltip"> tooltip </div></body></html>  

If you want to select the top-level elements = elements that are direct children of <body> - in this example: #wrap or #tooltip - then you have to use filter().

If you want to select other elements - in this example: #header, <h1>, #body, ... - then you have to use find().

I you don't know whether your element is a child of <body> or not, you could use this "hack":

$("<div>").html(data).find( selector );

By using this work-around, you always get the elements via find().


The jQuery.load method uses the following code:

// If successful, inject the HTML into all the matched elementsif ( status === "success" || status === "notmodified" ) {  // See if a selector was specified  self.html( selector ?    // Create a dummy div to hold the results    jQuery("<div />")      // inject the contents of the document in, removing the scripts      // to avoid any 'Permission Denied' errors in IE      .append(res.responseText.replace(rscript, ""))      // Locate the specified elements      .find(selector) :    // If not, just inject the full result    res.responseText );}

I.e it appends the full response to a DIV it creates, and then uses find(selector) on that.

So you should be looking at something like:

var foo = $('<div />').html(data).find('#foo'); // This looks like it'll work!

Bit of a hack from jQuery's point of view!


This is how I was able to get it working thanks to @Matt

$.ajax({    type: "GET",    url: url,    dataType: 'html',    success: function(data) {        $('#foo').html(            $('<div />').html(data).find('#foo').html()        );    }});