]> source.dussan.org Git - jquery-ui.git/commitdiff
Autocomplete: Optimize element type checks for speed and size.
authorScott González <scott.gonzalez@gmail.com>
Tue, 5 Feb 2013 14:33:48 +0000 (09:33 -0500)
committerScott González <scott.gonzalez@gmail.com>
Tue, 5 Feb 2013 14:34:32 +0000 (09:34 -0500)
ui/jquery.ui.autocomplete.js

index af1acb02b2f525827a4a41a0346f5298d2f06b93..f8470a8a140d007e20ed2228c6dd945e7b4d620d 100644 (file)
@@ -54,10 +54,21 @@ $.widget( "ui.autocomplete", {
                // so we use the suppressKeyPressRepeat flag to avoid handling keypress
                // events when we know the keydown event was used to modify the
                // search term. #7799
-               var suppressKeyPress, suppressKeyPressRepeat, suppressInput;
-
-               this.isMultiLine = this._isMultiLine();
-               this.valueMethod = this.element[ this.element.is( "input,textarea" ) ? "val" : "text" ];
+               var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
+                       nodeName = this.element[0].nodeName.toLowerCase(),
+                       isTextarea = nodeName === "textarea",
+                       isInput = nodeName === "input";
+
+               this.isMultiLine =
+                       // Textareas are always multi-line
+                       isTextarea ? true :
+                       // Inputs are always single-line, even if inside a contentEditable element
+                       // IE also treats inputs as contentEditable
+                       isInput ? false :
+                       // All other element types are determined by whether or not they're contentEditable
+                       this.element.prop( "isContentEditable" );
+
+               this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
                this.isNewMenu = true;
 
                this.element
@@ -341,20 +352,6 @@ $.widget( "ui.autocomplete", {
                return element;
        },
 
-       _isMultiLine: function() {
-               // Textareas are always multi-line
-               if ( this.element.is( "textarea" ) ) {
-                       return true;
-               }
-               // Inputs are always single-line, even if inside a contentEditable element
-               // IE also treats inputs as contentEditable
-               if ( this.element.is( "input" ) ) {
-                       return false;
-               }
-               // All other element types are determined by whether or not they're contentEditable
-               return this.element.prop( "isContentEditable" );
-       },
-
        _initSource: function() {
                var array, url,
                        that = this;