ChatGPT解决这个技术问题 Extra ChatGPT

How can I remove all CSS classes using jQuery/JavaScript?

Instead of individually calling $("#item").removeClass() for every single class an element might have, is there a single function which can be called which removes all CSS classes from the given element?

Both jQuery and raw JavaScript will work.


P
Peter Mortensen
$("#item").removeClass();

Calling removeClass with no parameters will remove all of the item's classes.

You can also use (but it is not necessarily recommended. The correct way is the one above):

$("#item").removeAttr('class');
$("#item").attr('class', '');
$('#item')[0].className = '';

If you didn't have jQuery, then this would be pretty much your only option:

document.getElementById('item').className = '';

Shouldn't the attr() version be prop() now?
Calling removeClass() without parameters does not seem to work anymore in version 1.11.1
@Vincent Seems like a bug introduced in jQuery since their documentation explicitly states this: If a class name is included as a parameter, then only that class will be removed from the set of matched elements. If no class names are specified in the parameter, all classes will be removed. api.jquery.com/removeclass
Yes, I also suspect it's a bug, and not by design. In the meantime, the following pure JavaScript works just fine. document.getElementById("item").removeAttribute("class");
There is a problem with jQuery UI 1.9. If removeClass() didn't work use removeAttr('class')
d
da5id

Hang on, doesn't removeClass() default to removing all classes if nothing specific is specified? So

$("#item").removeClass();

will do it on its own...


yeah: "Removes all or the specified class(es) from the set of matched elements."
Now it is documented properly: If no class names are specified in the parameter, all classes will be removed.
P
Peter Mortensen

Just set the className attribute of the real DOM element to '' (nothing).

$('#item')[0].className = ''; // the real DOM element is at [0]

Other people have said that just calling removeClass works - I tested this with the Google jQuery Playground: http://savedbythegoog.appspot.com/?id=ag5zYXZlZGJ5dGhlZ29vZ3ISCxIJU2F2ZWRDb2RlGIS61gEM ... and it works. So you can also do it this way:

$("#item").removeClass();

k
kangax

Of course.

$('#item')[0].className = '';
// or
document.getElementById('item').className = '';

P
Peter Mortensen

Remove specific classes:

$('.class').removeClass('class');

Say if element has class="class another-class".


The last sentence seems incomprehensible. Can you fix it?
Y
Yanni

The shortest method

$('#item').removeAttr('class').attr('class', '');

P
Peter Mortensen

You can just try:

$(document).ready(function() {
   $('body').find('#item').removeClass();
});

If you have to access that element without a class name, for example you have to add a new class name, you can do this:

$(document).ready(function() {
   $('body').find('#item').removeClass().addClass('class-name');
});

I use that function in my project to remove and add classes in an HTML builder.


x
xgqfrms

I like using native JavaScript to do this, believe it or not!

solution 1: className

Remove all class of all items

const items = document.querySelectorAll('item');
for (let i = 0; i < items.length; i++) {
  items[i].className = '';
}

Only remove all class of the first item

const item1 = document.querySelector('item');
item1.className = '';

solution 2: classList

// remove all class of all items
 const items = [...document.querySelectorAll('.item')];
 for (const item of items) {
   item.classList.value = '';
 }
 // remove all class of the first item
 const items = [...document.querySelectorAll('.item')];
 for (const [i, item] of items.entries()) {
   if(i === 0) {
     item.classList.value = '';
   }
 }
 // or
 const item = document.querySelector('.item');
 item.classList.value = '';

jQuery ways (not recommended)

$("#item").removeClass(); $("#item").removeClass("class1 ... classn");

refs

https://developer.mozilla.org/en-US/docs/Web/API/Element/className

https://developer.mozilla.org/en-US/docs/Web/API/Element/classList


P
Peter Mortensen
$('#elm').removeAttr('class');

Attribute "class" will no longer be present in "elm".


this is what worked for me. removeClass(); did not work for me.
P
Peter Mortensen

Since not all versions of jQuery are created equal, you may run into the same issue I did, which means calling $("#item").removeClass(); does not actually remove the class (probably a bug).

A more reliable method is to simply use raw JavaScript and remove the class attribute altogether.

document.getElementById("item").removeAttribute("class");

G
Gregory Bologna

Let's use this example. Maybe you want the user of your website to know a field is valid or it needs attention by changing the background color of the field. If the user hits reset then your code should only reset the fields that have data and not bother to loop through every other field on your page.

This jQuery filter will remove the class "highlightCriteria" only for the input or select fields that have this class.

$form.find('input,select').filter(function () {
    if((!!this.value) && (!!this.name)) {
        $("#"+this.id).removeClass("highlightCriteria");
    }
});

P
Peter Mortensen

Try with removeClass.

For instance:

var nameClass=document.getElementsByClassName("clase1"); console.log("after", nameClass[0]); $(".clase1").removeClass(); var nameClass=document.getElementsByClassName("clase1"); console.log("before", nameClass[0]);

I am a Div with class="clase1"


P
Peter Mortensen

I had a similar issue. In my case, on disabled elements was applied that aspNetDisabled class and all disabled controls had wrong colors. So, I used jQuery to remove this class on every element/control I want and everything works and looks great now.

This is my code for removing aspNetDisabled class:

$(document).ready(function () {

    $("span").removeClass("aspNetDisabled");
    $("select").removeClass("aspNetDisabled");
    $("input").removeClass("aspNetDisabled");

});

It is incomprehensible near "was applied that". Can you fix it? (But without "Edit:", "Update:", or similar - the question/answer should appear as if it was written today.)