diff options
author | Michał Gołębiowski-Owczarek <m.goleb@gmail.com> | 2020-01-13 19:25:01 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-13 19:25:01 +0100 |
commit | ff2819911da6cbbed5ee42c35d695240f06e65e3 (patch) | |
tree | bf47e765a9cbed3935126d96f53f35f6f32b1795 /src | |
parent | eb35be528fdea40faab4d89ac859d38dfd024271 (diff) | |
download | jquery-ff2819911da6cbbed5ee42c35d695240f06e65e3.tar.gz jquery-ff2819911da6cbbed5ee42c35d695240f06e65e3.zip |
Attributes: Refactor val(): don't strip carriage return, isolate IE workarounds
Before this change, `val()` was stripping out carriage return characters from
the returned value. No test has relied on that. The logic was different for
option elements as its custom defined hook was omitting this stripping logic.
This commit gets rid of the carriage return removal and isolates the IE-only
select val getter to be skipped in other browsers.
Closes gh-4585
Diffstat (limited to 'src')
-rw-r--r-- | src/attributes/val.js | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/src/attributes/val.js b/src/attributes/val.js index 38e170ba8..f200f97ee 100644 --- a/src/attributes/val.js +++ b/src/attributes/val.js @@ -1,11 +1,10 @@ import jQuery from "../core.js"; +import isIE from "../var/isIE.js"; import stripAndCollapse from "../core/stripAndCollapse.js"; import nodeName from "../core/nodeName.js"; import "../core/init.js"; -var rreturn = /\r/g; - jQuery.fn.extend( { val: function( value ) { var hooks, ret, valueIsFunction, @@ -25,11 +24,6 @@ jQuery.fn.extend( { ret = elem.value; - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - // Handle cases where value is null/undef or number return ret == null ? "" : ret; } @@ -77,20 +71,6 @@ jQuery.fn.extend( { jQuery.extend( { valHooks: { - option: { - get: function( elem ) { - - var val = elem.getAttribute( "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11+ - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, select: { get: function( elem ) { var value, option, i, @@ -144,7 +124,7 @@ jQuery.extend( { option = options[ i ]; if ( ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + jQuery.inArray( jQuery( option ).val(), values ) > -1 ) ) { optionSet = true; } @@ -160,6 +140,23 @@ jQuery.extend( { } } ); +if ( isIE ) { + jQuery.valHooks.option = { + get: function( elem ) { + + var val = elem.getAttribute( "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11+ + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }; +} + // Radios and checkboxes getter/setter jQuery.each( [ "radio", "checkbox" ], function() { jQuery.valHooks[ this ] = { |