Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

switchClass() removes class if removeClass and addClass params are the same #2158

Open
gtasker10 opened this issue Mar 30, 2023 · 5 comments

Comments

@gtasker10
Copy link

I am using jQuery 3.6.0. Seems to be an undocumented "feature" with switchClass(). If I specify the same class to remove and then add, I get no class. In the following example, I would expect to see class="big":

   <input type="text" id="myInput" class="big"></input>
   <script>
      $(document).ready(function () {
         $("#myInput").switchClass("big", "big");
      });
   </script>

The above generates:

<input type="text" id="myInput" class="">

@mgol
Copy link
Member

mgol commented Apr 3, 2023

Thanks for the report. Does the issue you describe exist when jQuery UI 1.12.1 is used or only with jQuery UI 1.13.0 or newer?

@mgol mgol added the Needs info label Apr 3, 2023
@markvantilburg
Copy link
Contributor

it's also in v1.12

https://jsfiddle.net/jgh7eu0w/

@markvantilburg
Copy link
Contributor

markvantilburg commented May 21, 2024

return $.effects.animateClass.call( this, {

do nothing

if(remove === add){return;}

or

		if(remove === add){
			return $.effects.animateClass.call( this, {
			add: add
		}, speed, easing, callback );
		} else {
		return $.effects.animateClass.call( this, {
			remove: remove,
			add: add
		}, speed, easing, callback );
		}

@mgol
Copy link
Member

mgol commented May 21, 2024

Thanks for the report. Since the issue is already in 1.12, given limited team resources it's not likely to be fixed by the UI team; see the project status at https://blog.jqueryui.com/2021/10/jquery-maintainers-update-and-transition-jquery-ui-as-part-of-overall-modernization-efforts/. PRs are welcome if they're not too complex and contain tests.

@mgol
Copy link
Member

mgol commented May 21, 2024

The docs don't really specify what happens if a class appears in both properties. $.effects.animateClass currently applies the options in iteration order from what I understand. And because remove is specified after add, it has precendence.

It's probably too late to change it now and I'm not even sure if that would be desired. I'd advise to just filter out the classes you don't want removing from the second argument.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

No branches or pull requests

3 participants