Switch to using String.prototype.trim from String.trim as it's more-widely available.
[jquery.git] / src / core.js
index 50e1676..699b87a 100644 (file)
@@ -27,7 +27,8 @@ var jQuery = function( selector, context ) {
        rnotwhite = /\S/,
 
        // Used for trimming whitespace
-       rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g,
+       trimLeft = /^\s+/,
+       trimRight = /\s+$/,
 
        // Match a standalone tag
        rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
@@ -52,6 +53,7 @@ var jQuery = function( selector, context ) {
        hasOwn = Object.prototype.hasOwnProperty,
        push = Array.prototype.push,
        slice = Array.prototype.slice,
+       trim = String.prototype.trim,
        indexOf = Array.prototype.indexOf;
 
 jQuery.fn = jQuery.prototype = {
@@ -567,9 +569,20 @@ jQuery.extend({
                return object;
        },
 
-       trim: function( text ) {
-               return (text || "").replace( rtrim, "" );
-       },
+       // Use native String.trim function wherever possible
+       trim: trim ?
+               function( text ) {
+                       return text == null ?
+                               "" :
+                               trim.call( text );
+               } :
+
+               // Otherwise use our own trimming functionality
+               function( text ) {
+                       return text == null ?
+                               "" :
+                               text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+               },
 
        // results is for internal usage only
        makeArray: function( array, results ) {
@@ -720,6 +733,13 @@ if ( indexOf ) {
        };
 }
 
+// Verify that \s matches non-breaking spaces
+// (IE fails on this test)
+if ( !/\s/.test( "\xA0" ) ) {
+       trimLeft = /^[\s\xA0]+/;
+       trimRight = /[\s\xA0]+$/;
+}
+
 // All jQuery objects should point back to these
 rootjQuery = jQuery(document);