New feature: You can now inject portions of a document via .load(), as opposed to...
authorJohn Resig <jeresig@gmail.com>
Sat, 25 Aug 2007 03:33:08 +0000 (03:33 +0000)
committerJohn Resig <jeresig@gmail.com>
Sat, 25 Aug 2007 03:33:08 +0000 (03:33 +0000)
Examples:
- $("#test").load("test.html #something");
- $("#test").load("test.html p.user");

Caveats:
- No scripts are injected when a selector is used.
- The selector is rooted inside the head and body - it's equivalent to doing:
  $("body,head").find(selector)

src/ajax/ajax.js

index aa62754..795cd8a 100644 (file)
@@ -48,6 +48,10 @@ jQuery.fn.extend({
                if ( jQuery.isFunction( url ) )
                        return this.bind("load", url);
 
+               var off = url.indexOf(" ");
+               var selector = url.slice(off, url.length);
+               url = url.slice(0, off);
+
                callback = callback || function(){};
 
                // Default to a GET request
@@ -78,7 +82,19 @@ jQuery.fn.extend({
                        complete: function(res, status){
                                // If successful, inject the HTML into all the matched elements
                                if ( status == "success" || !ifModified && status == "notmodified" )
-                                       self.html(res.responseText);
+                                       // 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(/<script(.|\s)*?\/script>/g, ""))
+
+                                                       // Locate the specified elements
+                                                       .find(selector) :
+
+                                               // If not, just inject the full result
+                                               res.responseText );
 
                                // Add delay to account for Safari's delay in globalEval
                                setTimeout(function(){