Jak Mogę zmienić klasę elementu za pomocą JavaScript?

Jak mogę zmienić klasę elementu HTML w odpowiedzi na onclick lub inne zdarzenia za pomocą JavaScript?

Author: Vibhor, 2008-10-12

30 answers

Nowoczesne techniki HTML5 do zmiany klas

Nowoczesne przeglądarki dodały classList co zapewnia metody ułatwiające manipulowanie klasami bez potrzeby korzystania z biblioteki:

document.getElementById("MyElement").classList.add('MyClass');

document.getElementById("MyElement").classList.remove('MyClass');

if ( document.getElementById("MyElement").classList.contains('MyClass') )

document.getElementById("MyElement").classList.toggle('MyClass');
[19]} niestety, nie działają one w Internet Explorerze przed v10, chociaż istnieje shim , aby dodać wsparcie dla niego do IE8 i IE9, dostępne z Ta strona . Jest to jednak coraz bardziej wspierane .

Proste rozwiązanie cross-browser

Standardowy sposób JavaScript, aby wybrać element jest za pomocą document.getElementById("Id"), tego właśnie używają poniższe przykłady - można oczywiście uzyskać elementy na inne sposoby, a we właściwej sytuacji można po prostu użyć this - jednak wnikanie w szczegóły w tym zakresie wykracza poza zakres odpowiedzi.

Aby zmienić wszystkie klasy dla elementu:

Aby zastąpić wszystkie istniejące klasy jedną lub więcej nowymi klasami, Ustaw nazwę klasy atrybut:

document.getElementById("MyElement").className = "MyClass";

(możesz użyć listy rozdzielonej spacjami, aby zastosować wiele klas.)

Aby dodać dodatkową klasę do elementu:

Aby dodać klasę do elementu, bez usuwania / wpływania na istniejące wartości, dodaj spację i nową nazwę klasy, w ten sposób:

document.getElementById("MyElement").className += " MyClass";

Aby usunąć klasę z elementu:

Aby usunąć pojedynczą klasę do elementu, bez wpływu na inne potencjalne klasy, wymagane jest proste zastępowanie regex:
document.getElementById("MyElement").className =
   document.getElementById("MyElement").className.replace
      ( /(?:^|\s)MyClass(?!\S)/g , '' )
/* Code wrapped for readability - above is all one statement */

Wyjaśnienie ten regex jest następujący:

(?:^|\s) # Match the start of the string or any single whitespace character

MyClass  # The literal text for the classname to remove

(?!\S)   # Negative lookahead to verify the above is the whole classname
         # Ensures there is no non-space character following
         # (i.e. must be the end of the string or space)

Znacznik g mówi replace, aby powtórzyło się zgodnie z wymaganiami, w przypadku gdy nazwa klasy została dodana wiele razy.

Aby sprawdzić, czy klasa jest już zastosowana do elementu:

Ten sam regex użyty powyżej do usunięcia klasy może być również użyty jako sprawdzenie czy dana klasa istnieje:

if ( document.getElementById("MyElement").className.match(/(?:^|\s)MyClass(?!\S)/) )

### Przypisywanie tych akcji do zdarzeń onclick:

Podczas gdy możliwe jest pisanie JavaScript bezpośrednio wewnątrz zdarzenia HTML atrybuty (takie jak onclick="this.className+=' MyClass'") nie jest to zalecane zachowanie. Szczególnie w przypadku większych aplikacji, bardziej możliwy do utrzymania kod uzyskuje się poprzez oddzielenie znaczników HTML od logiki interakcji JavaScript.

Aby to osiągnąć, należy utworzyć funkcję i wywołać ją w atrybucie onclick, na przykład:
<script type="text/javascript">
    function changeClass(){
        // Code examples from above
    }
</script>
...
<button onclick="changeClass()">My Button</button>

(nie jest wymagane, aby mieć ten kod w znacznikach skryptu, jest to po prostu dla zwięzłości przykładu, i włączenie JavaScript w odrębny plik może być bardziej odpowiedni.)

Drugim krokiem jest przeniesienie zdarzenia onclick z HTML i do JavaScript, na przykład za pomocą addEventListener

<script type="text/javascript">
    function changeClass(){
        // Code examples from above
    }

    window.onload = function(){
        document.getElementById("MyElement").addEventListener( 'click', changeClass);
    }
</script>
...
<button id="MyElement">My Button</button>

(zwróć uwagę, że okno.część onload jest wymagana, aby zawartość tej funkcji została wykonana po zakończeniu ładowania HTML - bez tego Mielement może nie istnieć, gdy kod JavaScript jest wywoływany, więc ta linia nie powiedzie się.)


JavaScript Frameworki i biblioteki

Powyższy kod jest w standardzie JavaScript, jednak powszechną praktyką jest używanie frameworka lub biblioteki do uproszczenia typowych zadań, a także korzystanie z naprawionych błędów i przypadków brzegowych, o których możesz nie myśleć podczas pisania kodu.

Podczas gdy niektórzy uważają za przesadę dodanie frameworka ~50 KB do zwykłej zmiany klasy, jeśli wykonujesz znaczną ilość pracy w JavaScript lub cokolwiek, co może mieć nietypowe cross-browser zachowanie, warto rozważyć.

(Z Grubsza Biblioteka jest zestawem narzędzi zaprojektowanych do określonego zadania, podczas gdy framework zazwyczaj zawiera wiele bibliotek i wykonuje pełny zestaw obowiązków.)

Powyższe przykłady zostały przedstawione poniżej przy użyciu jQuery , prawdopodobnie najczęściej używanej biblioteki JavaScript(choć są też inne warte zbadania).

(zauważ, że $ tutaj znajduje się obiekt jQuery.)

Zmiana Klasy z jQuery:

$('#MyElement').addClass('MyClass');

$('#MyElement').removeClass('MyClass');

if ( $('#MyElement').hasClass('MyClass') )
W jQuery można używać skrótu do dodawania klasy, jeśli nie ma ona zastosowania, lub do usuwania klasy, która działa:
$('#MyElement').toggleClass('MyClass');

### Przypisywanie funkcji do zdarzenia click za pomocą jQuery:
$('#MyElement').click(changeClass);

Lub, bez potrzeby ID:

$(':button:contains(My Button)').click(changeClass);

 4067
Author: Peter Boughton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-15 10:31:16

Możesz też po prostu zrobić:

document.getElementById('id').classList.add('class');
document.getElementById('id').classList.remove('class');

I aby przełączyć klasę (usunąć, jeśli istnieje, dodać ją):

document.getElementById('id').classList.toggle('class');
 436
Author: Tyilo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-04 19:27:25

W jednym z moich starych projektów, które nie używały jQuery, zbudowałem następujące funkcje do dodawania, usuwania i sprawdzania, czy element ma klasę:

function hasClass(ele, cls) {
    return ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
}
function addClass(ele, cls) {
    if (!hasClass(ele, cls)) ele.className += " " + cls;
}
function removeClass(ele, cls) {
    if (hasClass(ele, cls)) {
        var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
        ele.className = ele.className.replace(reg, ' ');
    }
}

Więc, na przykład, jeśli chcę onclick dodać jakąś klasę do przycisku mogę użyć tego:

<script type="text/javascript">
    function changeClass(btn, cls) {
        if(!hasClass(btn, cls)) {
            addClass(btn, cls);
        }
    }
</script>
...
<button onclick="changeClass(this, "someClass")">My Button</button>

Teraz na pewno lepiej byłoby użyć jQuery.

 124
Author: Andrew Orsich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-06 13:00:13

Możesz użyć node.className w ten sposób:

document.getElementById('foo').className = 'bar';

Powinno działać w IE5. 5 i w górę zgodnie z PPK .

 81
Author: Eric Wendelin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-22 00:32:33

Dziwi mnie, że jest tu tyle przesadnych odpowiedzi...

<div class="firstClass" onclick="this.className='secondClass'">
 54
Author: Travis J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-19 23:47:46

Użycie czystego kodu JavaScript:

function hasClass(ele, cls) {
    return ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
}

function addClass(ele, cls) {
    if (!this.hasClass(ele, cls)) ele.className += " " + cls;
}

function removeClass(ele, cls) {
    if (hasClass(ele, cls)) {
        var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
        ele.className = ele.className.replace(reg, ' ');
    }
}

function replaceClass(ele, oldClass, newClass){
    if(hasClass(ele, oldClass)){
        removeClass(ele, oldClass);
        addClass(ele, newClass);
    }
    return;
}

function toggleClass(ele, cls1, cls2){
    if(hasClass(ele, cls1)){
        replaceClass(ele, cls1, cls2);
    }else if(hasClass(ele, cls2)){
        replaceClass(ele, cls2, cls1);
    }else{
        addClass(ele, cls1);
    }
}
 50
Author: PseudoNinja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-11 15:59:53

To działa dla mnie:

function setCSS(eleID) {
    var currTabElem = document.getElementById(eleID);

    currTabElem.setAttribute("class", "some_class_name");
    currTabElem.setAttribute("className", "some_class_name");
}
 35
Author: Gopal Krishna Ranjan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-11 16:01:02

Można również rozszerzyć obiekt HTMLElement, aby dodać metody dodawania, usuwania, przełączania i sprawdzania klas (gist):

HTMLElement = typeof(HTMLElement) != 'undefiend' ? HTMLElement : Element;

HTMLElement.prototype.addClass = function(string) {
  if (!(string instanceof Array)) {
    string = string.split(' ');
  }
  for(var i = 0, len = string.length; i < len; ++i) {
    if (string[i] && !new RegExp('(\\s+|^)' + string[i] + '(\\s+|$)').test(this.className)) {
      this.className = this.className.trim() + ' ' + string[i];
    }
  }
}

HTMLElement.prototype.removeClass = function(string) {
  if (!(string instanceof Array)) {
    string = string.split(' ');
  }
  for(var i = 0, len = string.length; i < len; ++i) {
    this.className = this.className.replace(new RegExp('(\\s+|^)' + string[i] + '(\\s+|$)'), ' ').trim();
  }
}

HTMLElement.prototype.toggleClass = function(string) {
  if (string) {
    if (new RegExp('(\\s+|^)' + string + '(\\s+|$)').test(this.className)) {
      this.className = this.className.replace(new RegExp('(\\s+|^)' + string + '(\\s+|$)'), ' ').trim();
    } else {
      this.className = this.className.trim() + ' ' + string;
    }
  }
}

HTMLElement.prototype.hasClass = function(string) {
  return string && new RegExp('(\\s+|^)' + string + '(\\s+|$)').test(this.className);
}

A następnie po prostu użyj w ten sposób (po kliknięciu dodasz lub usuniesz klasę):

document.getElementById('yourElementId').onclick = function() {
  this.toggleClass('active');
}

Oto demo .

 23
Author: moka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-11 10:13:36

Aby dodać informacje z innego popularnego frameworka, Google, zobacz ich dom / classes class:

goog.dom.classes.add(element, var_args)

goog.dom.classes.addRemove(element, classesToRemove, classesToAdd)

goog.dom.classes.remove(element, var_args)

Jedną z opcji wyboru elementu jest użycie goog.dom.zapytanie z selektorem CSS3:

var myElement = goog.dom.query("#MyElement")[0];
 19
Author: Ben Flynn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-26 21:04:12

Kilka drobnych uwag i poprawek w poprzednich wyrażeniach regularnych:

Będziesz chciał zrobić to globalnie, jeśli lista klas ma nazwę klasy więcej niż raz. Prawdopodobnie będziesz chciał usunąć spacje z końców listy klas i przekonwertować wiele spacji na jedną spację, aby nie uzyskiwać ciągów spacji. Żadna z tych rzeczy nie powinna być problemem, jeśli jedyny kod dinking z nazwami klas używa regex poniżej i usuwa nazwę przed dodaniem jej. Ale. Kto wie, kto może być / align = "left" /

Ten regex jest niewrażliwy na wielkość liter, więc błędy w nazwach klas mogą pojawić się przed użyciem kodu w przeglądarce, która nie dba o wielkość liter w nazwach klas.

var s = "testing   one   four  one  two";
var cls = "one";
var rg          = new RegExp("(^|\\s+)" + cls + "(\\s+|$)", 'ig');
alert("[" + s.replace(rg, ' ') + "]");
var cls = "test";
var rg          = new RegExp("(^|\\s+)" + cls + "(\\s+|$)", 'ig');
alert("[" + s.replace(rg, ' ') + "]");
var cls = "testing";
var rg          = new RegExp("(^|\\s+)" + cls + "(\\s+|$)", 'ig');
alert("[" + s.replace(rg, ' ') + "]");
var cls = "tWo";
var rg          = new RegExp("(^|\\s+)" + cls + "(\\s+|$)", 'ig');
alert("[" + s.replace(rg, ' ') + "]");
 16
Author: Alex Robinson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-22 22:23:57

Zmień klasę CSS elementu za pomocą JavaScript w ASP.NET :

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        lbSave.Attributes.Add("onmouseover", "this.className = 'LinkButtonStyle1'")
        lbSave.Attributes.Add("onmouseout", "this.className = 'LinkButtonStyle'")
        lbCancel.Attributes.Add("onmouseover", "this.className = 'LinkButtonStyle1'")
        lbCancel.Attributes.Add("onmouseout", "this.className = 'LinkButtonStyle'")
    End If
End Sub
 15
Author: Hiren Kansara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-06 18:17:49

Użyłbym jQuery i napisałbym coś takiego:

jQuery(function($) {
    $("#some-element").click(function() {
        $(this).toggleClass("clicked");
    });
});

Ten kod dodaje funkcję, która zostanie wywołana, gdy element o id jakiś element zostanie kliknięty. Funkcja dodaje clicked do atrybutu klasy elementu, jeśli nie jest on już jego częścią, i usuwa go, jeśli tam jest.

Tak, musisz dodać odniesienie do biblioteki jQuery na swojej stronie, aby użyć tego kodu, ale przynajmniej możesz mieć pewność, że większość funkcji w bibliotece będzie działać na pretty wiele nowoczesnych przeglądarek, a to pozwoli Ci zaoszczędzić czas implementacji własnego kodu, aby zrobić to samo.

Thanks

 14
Author: shingokko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-25 02:50:27

Linia

document.getElementById("MyElement").className = document.getElementById("MyElement").className.replace(/\bMyClass\b/','')

Powinno być:

document.getElementById("MyElement").className = document.getElementById("MyElement").className.replace('/\bMyClass\b/','');
 12
Author: Eric Bailey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-24 16:39:15

Zmiana klasy elementu w vanilla JavaScript z obsługą IE6

Możesz spróbować użyć właściwości node attributes, Aby zachować kompatybilność ze starymi przeglądarkami nawet IE6:

function getClassNode(element) {
  for (var i = element.attributes.length; i--;)
    if (element.attributes[i].nodeName === 'class')
      return element.attributes[i];
}

function removeClass(classNode, className) {
  var index, classList = classNode.value.split(' ');
  if ((index = classList.indexOf(className)) > -1) {
    classList.splice(index, 1);
    classNode.value = classList.join(' ');
  }
}

function hasClass(classNode, className) {
  return classNode.value.indexOf(className) > -1;
}

function addClass(classNode, className) {
  if (!hasClass(classNode, className))
    classNode.value += ' ' + className;
}

document.getElementById('message').addEventListener('click', function() {
  var classNode = getClassNode(this);
  var className = hasClass(classNode, 'red') && 'blue' || 'red';

  removeClass(classNode, 'red');
  removeClass(classNode, 'blue');

  addClass(classNode, className);
})
.red {
  color: red;
}
.red:before {
  content: 'I am red! ';
}
.red:after {
  content: ' again';
}
.blue {
  color: blue;
}
.blue:before {
  content: 'I am blue! '
}
<span id="message" class="">Click me</span>
 11
Author: Eugene Tiurin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-07 18:46:49

Oto moja wersja, w pełni działająca:

function addHTMLClass(item, classname) {
    var obj = item
    if (typeof item=="string") {
        obj = document.getElementById(item)
    }
    obj.className += " " + classname
}

function removeHTMLClass(item, classname) {
    var obj = item
    if (typeof item=="string") {
        obj = document.getElementById(item)
    }
    var classes = ""+obj.className
    while (classes.indexOf(classname)>-1) {
        classes = classes.replace (classname, "")
    }
    obj.className = classes
}

Użycie:

<tr onmouseover='addHTMLClass(this,"clsSelected")'
onmouseout='removeHTMLClass(this,"clsSelected")' >
 9
Author: alfred,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-06 18:20:53

Oto toggleClass do przełączania/dodawania / usuwania klasy na elemencie:

// If newState is provided add/remove theClass accordingly, otherwise toggle theClass
function toggleClass(elem, theClass, newState) {
    var matchRegExp = new RegExp('(?:^|\\s)' + theClass + '(?!\\S)', 'g');
    var add=(arguments.length>2 ? newState : (elem.className.match(matchRegExp) == null));

    elem.className=elem.className.replace(matchRegExp, ''); // clear all
    if (add) elem.className += ' ' + theClass;
}

Zobacz jsfiddle

Zobacz także moją odpowiedź tutaj aby utworzyć nową klasę dynamicznie

 9
Author: kofifus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:58

Używam następujących funkcji JavaScript w moim kodzie. Używają wyrażeń regularnych i indexOf, ale nie wymagają cytowania znaków specjalnych w wyrażeniach regularnych.

function addClass(el, cn) {
    var c0 = (" " + el.className + " ").replace(/\s+/g, " "),
        c1 = (" " + cn + " ").replace(/\s+/g, " ");
    if (c0.indexOf(c1) < 0) {
        el.className = (c0 + c1).replace(/\s+/g, " ").replace(/^ | $/g, "");
    }
}

function delClass(el, cn) {
    var c0 = (" " + el.className + " ").replace(/\s+/g, " "),
        c1 = (" " + cn + " ").replace(/\s+/g, " ");
    if (c0.indexOf(c1) >= 0) {
        el.className = c0.replace(c1, " ").replace(/\s+/g, " ").replace(/^ | $/g, "");
    }
}

Można również użyć elementu .classList w nowoczesnych przeglądarkach.

 8
Author: Salman A,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-18 09:37:49

OPCJE.

Oto kilka przykładów stylu i listy klas, dzięki którym dowiesz się, jakie masz dostępne opcje i jak używać classList do robienia tego, co chcesz.

style vs.classList

Różnica między style i classList jest taka, że z style dodajesz do właściwości stylu elementu, ale {[3] } jest rodzajem kontrolowania Klasy(klas) elementu (add, remove, toggle, contain), pokażę Ci jak używać add i remove metoda, ponieważ te są popularne.


Przykład Stylu

Jeśli chcesz dodać margin-top właściwość do elementu, wykonaj w taki sposób:

// Get the Element
const el = document.querySelector('#element');

// Add CSS property 
el.style.margintop = "0px"
el.style.margintop = "25px" // This would add a 25px to the top of the element.

Przykład ClassList

Powiedzmy, że mamy <div class="class-a class-b">, w tym przypadku mamy już 2 klasy dodane do naszego elementu div, class-a i class-b, i chcemy kontrolować, jakie klasy remove A jaka Klasa do add. To tutaj classList staje się przydatne.

Usuń class-b

// Get the Element
const el = document.querySelector('#element');

// Remove class-b style from the element
el.classList.remove("class-b")

Dodaj class-c

// Get the Element
const el = document.querySelector('#element');

// Add class-b style from the element
el.classList.add("class-c")


 4
Author: Farhad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Pytanie OP brzmiało Jak mogę zmienić klasę elementu za pomocą JavaScript?

Nowoczesne przeglądarki pozwalają na to z jednym wierszem javascript:

document.getElementById('id').classList.replace('span1','span2')

Atrybut classList dostarcza DOMTokenList, który ma różne metody. Możesz operować na liście klas elementu za pomocą prostych manipulacji, takich jak add(), remove () lub replace () . Lub uzyskać bardzo wyrafinowane i manipulować klasami, jak byś obiekt lub Mapa za pomocą klawiszy (), wartości(), wpisy()

Odpowiedź Petera Boughtona jest świetna, ale ma już ponad dekadę. Wszystkie nowoczesne przeglądarki obsługują teraz DOMTokenList-zobacz https://caniuse.com/#search=classList i nawet IE11 obsługuje niektóre metody DOMTokenList

 3
Author: timbo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-04 00:02:17

Pomyślałem, że to wrzucę:

function inArray(val, ary){
  for(var i=0,l=ary.length; i<l; i++){
    if(ary[i] === val){
      return true;
    }
  }
  return false;
}
function removeClassName(classNameS, fromElement){
  var x = classNameS.split(/\s/), s = fromElement.className.split(/\s/), r = [];
  for(var i=0,l=s.length; i<l; i++){
    if(!iA(s[i], x))r.push(s[i]);
  }
  fromElement.className = r.join(' ');
}
function addClassName(classNameS, toElement){
  var s = toElement.className.split(/\s/);
  s.push(c); toElement.className = s.join(' ');
}
 2
Author: StackSlave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-20 02:35:01

Po Prostu powiedz myElement.classList="new-class", chyba że musisz utrzymywać inne istniejące klasy, w którym to przypadku możesz użyć metod classList.add, .remove.

var doc = document;
var divOne = doc.getElementById("one");
var goButton = doc.getElementById("go");

goButton.addEventListener("click", function() {
  divOne.classList="blue";
});
div{
  min-height:48px;
  min-width:48px;
}
.bordered{
  border: 1px solid black;
}
.green{
  background:green;
}
.blue{
  background: blue;
}
<button id="go">Change Class</button>

<div id="one" class="bordered green">

</div>
 2
Author: Ronnie Royston,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-21 02:50:51

OK, myślę, że w tym przypadku należy użyć jQuery lub napisać własne metody w czystym javascript, moje preferencje jest dodawanie własnych metod zamiast wstrzykiwania wszystkich jQuery do mojej aplikacji, Jeśli nie potrzebuję tego z innych powodów.

Chciałbym zrobić coś takiego jak poniżej jako metody do mojego frameworka javascript, aby dodać kilka funkcjonalności, które obsługują dodawanie klas, usuwanie klas, itp podobne do jQuery, jest to w pełni obsługiwane w IE9+, również mój kod jest napisany w ES6, więc musisz zrobić oczywiście twoja przeglądarka go obsługuje lub używasz czegoś takiego jak babel, w przeciwnym razie musisz użyć składni ES5 w kodzie, również w ten sposób znajdujemy element poprzez ID, co oznacza, że element musi mieć ID do wyboru:

//simple javascript utils for class management in ES6
var classUtil = {

  addClass: (id, cl) => {
    document.getElementById(id).classList.add(cl);
  },

  removeClass: (id, cl) => {
    document.getElementById(id).classList.remove(cl);
  },

  hasClass: (id, cl) => {
    return document.getElementById(id).classList.contains(cl);
  },

  toggleClass: (id, cl) => {
    document.getElementById(id).classList.toggle(cl);
  }

}

I możesz po prostu wywołać użyj ich jak poniżej, wyobraź sobie, że twój element ma id ' id 'i klasę 'class', upewnij się, że przekazujesz je jako ciąg znaków, możesz użyć util jak poniżej:

classUtil.addClass('myId', 'myClass');
classUtil.removeClass('myId', 'myClass');
classUtil.hasClass('myId', 'myClass');
classUtil.toggleClass('myId', 'myClass');
 2
Author: Alireza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-24 03:57:57

classList DOM API:

Bardzo wygodnym sposobem dodawania i usuwania klas jest classList DOM API. Ten API pozwala nam wybrać wszystkie klasy określonego elementu DOM w celu modyfikacji listy za pomocą javascript. Na przykład:

const el = document.getElementById("main");
console.log(el.classList);
<div class="content wrapper animated" id="main"></div>

Możemy zaobserwować w logu, że odzyskujemy obiekt z nie tylko klasami elementu, ale także wieloma pomocniczymi metodami i właściwościami. Obiekt ten dziedziczy z interfejsu DOMTokenList , interfejs, który jest używany w DOM do reprezentowania zestawu oddzielonych spacjami tokenów (takich jak Klasy).

Przykład:

const el = document.getElementById('container');


function addClass () {
   el.classList.add('newclass');
}


function replaceClass () {
     el.classList.replace('foo', 'newFoo');
}


function removeClass () {
       el.classList.remove('bar');
}
button{
  margin: 20px;
}

.foo{
  color: red;
}

.newFoo {
  color: blue;
}

.bar{
  background-color:powderblue;
}

.newclass{
  border: 2px solid green;
}
<div class="foo bar" id="container">
  "Sed ut perspiciatis unde omnis 
  iste natus error sit voluptatem accusantium doloremque laudantium, 
  totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et 
  quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam 
  voluptatem quia voluptas 
 </div>
  
<button onclick="addClass()">AddClass</button>
  
<button onclick="replaceClass()">ReplaceClass</button>
  
<button onclick="removeClass()">removeClass</button>
  
 2
Author: Willem van der Veen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-21 09:23:12

Tak, jest na to wiele sposobów. W składni ES6 możemy łatwo osiągnąć. Użyj tego kodu Przełącz dodawanie i usuwanie klasy.

const tabs=document.querySelectorAll('.menu li');

for(let tab of tabs){
  
  tab.onclick=function(){
    
  let activetab=document.querySelectorAll('li.active');
    
  activetab[0].classList.remove('active')
  
    tab.classList.add('active'); 
  }
  
}
body {
    padding:20px;
    font-family:sans-serif;    
}

ul {
    margin:20px 0;
    list-style:none;
}

li {
    background:#dfdfdf;
    padding:10px;
    margin:6px 0;
    cursor:pointer;
}

li.active {
    background:#2794c7;
    font-weight:bold;
    color:#ffffff;
}
<i>Please click an item:</i>

<ul class="menu">
  <li class="active"><span>Three</span></li>
  <li><span>Two</span></li>
  <li><span>One</span></li>
</ul>
 2
Author: Danish Khan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-06 14:02:57
function classed(el, class_name, add_class) {
  const re = new RegExp("(?:^|\\s)" + class_name + "(?!\\S)", "g");
  if (add_class && !el.className.match(re)) el.className += " " + class_name
  else if (!add_class) el.className = el.className.replace(re, '');
}

Użycie zaakceptowanej odpowiedzi powyżej jest prostą funkcją między przeglądarkami do dodawania i usuwania klasy

Dodaj klasę:

classed(document.getElementById("denis"), "active", true)

Usuń klasę:

classed(document.getElementById("denis"), "active", false)
 2
Author: donatso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-04 15:32:07

Wiele odpowiedzi, wiele dobrych odpowiedzi.

TL; DR:

document.getElementById('id').className = 'class'

lub

document.getElementById('id').classList.add('class');
document.getElementById('id').classList.remove('class');

to wszystko.

Jeśli naprawdę chcesz wiedzieć dlaczego i dokształcić się, proponuję przeczytać odpowiedź Petera Boughtona, jest idealna.

Uwaga:
Jest to możliwe dzięki (dokument lub wydarzenie):

  • getElementById()
  • getElementsByClassName()
  • querySelector()
  • querySelectorAll()
 2
Author: tfont,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-17 22:18:30

Istnieje właściwość className w javascript, aby zmienić nazwę klasy elementu HTML. Istniejąca wartość klasy zostanie zastąpiona nową, którą przypisałeś w nazwie klasy.

<!DOCTYPE html>
<html>
<head>
<title>How to change class of an HTML element in Javascript?</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body>
<h1 align="center"><i class="fa fa-home" id="icon"></i></h1><br />

<center><button id="change-class">Change Class</button></center>

<script>
var change_class=document.getElementById("change-class");
change_class.onclick=function()
{
    var icon=document.getElementById("icon");
    icon.className="fa fa-gear";
}

</script>
</body>
</html>

Kredyt - https://jaischool.com/javascript-lang/how-to-change-class-name-of-an-html-element-in-javascript.html

 2
Author: Jai Prakash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-20 12:25:24

Spróbuj

element.className='second'

function change(box) { box.className='second' }
.first  { width:  70px; height:  70px; background: #ff0                 }
.second { width: 150px; height: 150px; background: #f00; transition: 1s }
<div onclick="change(this)" class="first">Click me</div>
 2
Author: Kamil Kiełczewski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-08 08:55:53

Działający kod JavaScript:

<div id="div_add" class="div_add">Add class from Javascript</div>
<div id="div_replace" class="div_replace">Replace class from Javascript</div>
<div id="div_remove" class="div_remove">Remove class from Javascript</div>
<button onClick="div_add_class();">Add class from Javascript</button>
<button onClick="div_replace_class();">Replace class from Javascript</button>
<button onClick="div_remove_class();">Remove class from Javascript</button>
<script type="text/javascript">
    function div_add_class()
    {
        document.getElementById("div_add").className += " div_added";
    }
    function div_replace_class()
    {
        document.getElementById("div_replace").className = "div_replaced";
    }
    function div_remove_class()
    {
        document.getElementById("div_remove").className = "";
    }
</script>

Możesz pobrać działający kod z pod tym linkiem .

 -1
Author: Sajid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-22 22:25:47

Oto prosty kod jQuery, aby to zrobić.

$(".class1").click(function(argument) {
    $(".parentclass").removeClass("classtoremove");
    setTimeout(function (argument) {
        $(".parentclass").addClass("classtoadd");
    }, 100);
});

Tutaj,

  • Class1 jest słuchaczem wydarzenia.
  • Klasa nadrzędna jest klasą, która jest gospodarzem klasy, którą chcesz zmienić
  • Classtoremove to twoja stara Klasa.
  • Class to add to nowa klasa, którą chcesz dodać.
  • 100 to opóźnienie czasowe, podczas którego klasa jest zmieniana.
Powodzenia.
 -3
Author: uttamcafedeweb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-19 13:58:00