New feature: You can now inject portions of a document via .load(), as opposed to the full thing.

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)
This commit is contained in:
John Resig 2007-08-25 03:33:08 +00:00
parent 97f2032e13
commit 34f1042902

View 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(){