JavaScript로 요소의 클래스를 변경하려면 어떻게해야합니까?


2776

onclickJavaScript를 사용하여 이벤트 에 대한 응답으로 HTML 요소 클래스를 변경하려면 어떻게 해야합니까?


28
"클래스 속성은 주로 스타일 시트에서 클래스를 가리키는 데 사용됩니다. 그러나 지정된 클래스의 HTML 요소를 변경하기 위해 HTML DOM을 통해 JavaScript에서 사용할 수도 있습니다." - w3schools.com/tags/att_standard_class.asp
Triynko

11
element.setAttribute(name, value); 교체 name와 함께 class. 교체 value따옴표로 묶인 클래스를, 준 어떤 이름으로. 이렇게하면 현재 클래스를 삭제하고 다른 클래스를 추가 할 필요가 없습니다. 이 jsFiddle 예제 는 전체 작업 코드 보여줍니다.
Alan Wells

3
온 클릭으로 HTML 요소의 클래스를 변경하는 코드를 사용 <input type='button' onclick='addNewClass(this)' value='Create' /> 하고 자바 스크립트 섹션 : function addNewClass(elem){ elem.className="newClass";} 온라인
이만 Bahrampour

@Triynko-w3schools에 대한 링크가 변경되었으며 2012 년 9 월처럼 보입니다. 다음은 2012 년 9 월 12 일의 Archive.org 페이지입니다 : HTML class Attribute-w3schools . 다음은 w3schools.com의 교체 페이지 링크입니다. HTML class Attribute-w3schools .
Kevin Fegan

답변:


3879

클래스 변경을위한 최신 HTML5 기술

최신 브라우저에는 라이브러리가 없어도 클래스를보다 쉽게 ​​조작 할 수있는 메소드를 제공하는 classList 가 추가되었습니다 .

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');

이 있지만 불행하게도, 이들은, V10 이전에 Internet Explorer에서 작동하지 않습니다 에서 사용할 수 IE8 및 IE9에 대한 지원을 추가하기 위해, 이 페이지 . 그러나 점점 더 많은 지원을 받고 있습니다 .

간단한 크로스 브라우저 솔루션

요소를 선택하는 표준 JavaScript 방법 document.getElementById("Id")은 다음 예제에서 사용하는 것입니다. 물론 다른 방법으로 요소를 얻을 수 있으며 올바른 상황에서는 this대신 대신 사용할 수 있습니다. 그러나 이에 대한 자세한 내용은 범위를 벗어납니다. 대답.

요소의 모든 클래스를 변경하려면

기존의 모든 클래스를 하나 이상의 새 클래스로 바꾸려면 className 속성을 설정하십시오.

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

공백으로 구분 된 목록을 사용하여 여러 클래스를 적용 할 수 있습니다.

요소에 클래스를 추가하려면

기존 값을 제거하거나 영향을주지 않고 요소에 클래스를 추가하려면 다음과 같이 공백과 새 클래스 이름을 추가하십시오.

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

요소에서 클래스를 제거하려면

다른 잠재적 클래스에 영향을 미치지 않고 요소에 대한 단일 클래스를 제거하려면 간단한 정규식 바꾸기가 필요합니다.

document.getElementById("MyElement").className =
   document.getElementById("MyElement").className.replace
      ( /(?:^|\s)MyClass(?!\S)/g , '' )
/* Code wrapped for readability - above is all one statement */

이 정규식에 대한 설명은 다음과 같습니다.

(?:^|\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 end of string or a space)

g플래그는 필요, 경우에 클래스 이름이 추가 된 여러 번으로 반복으로 대체 알려줍니다.

클래스가 요소에 이미 적용되어 있는지 확인하려면

클래스를 제거하기 위해 위에서 사용한 것과 같은 정규 표현식을 사용하여 특정 클래스가 존재하는지 여부를 확인할 수도 있습니다.

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


onclick 이벤트에 다음 조치를 지정하십시오.

HTML 이벤트 속성 (예 : 등 onclick="this.className+=' MyClass'") 내에 JavaScript를 직접 작성할 수는 있지만 이는 권장되지 않습니다. 특히 더 큰 응용 프로그램에서는 HTML 마크 업을 JavaScript 상호 작용 논리와 분리하여 유지 관리하기 쉬운 코드를 얻을 수 있습니다.

이를 달성하기위한 첫 번째 단계는 함수를 작성하고 onclick 속성에서 함수를 호출하는 것입니다. 예를 들면 다음과 같습니다.

<script type="text/javascript">
    function changeClass(){
        // Code examples from above
    }
</script>
...
<button onclick="changeClass()">My Button</button>

(이 코드를 스크립트 태그에 포함 할 필요는 없습니다. 간단한 예제 일 뿐이므로 별도의 파일에 JavaScript를 포함시키는 것이 더 적절할 수 있습니다.)

두 번째 단계는 onclick 이벤트를 HTML 및 JavaScript로 이동하는 것입니다 (예 : 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>

(window.onload 부분은 HTML로드가 완료된 해당 함수의 내용이 실행되도록하는 데 필요 합니다. 그렇지 않으면 JavaScript 코드가 호출 될 때 MyElement가 존재하지 않아 행이 실패합니다.)


자바 스크립트 프레임 워크 및 라이브러리

위의 코드는 모두 표준 JavaScript로되어 있지만 프레임 워크 또는 라이브러리를 사용하여 일반적인 작업을 단순화하고 코드를 작성할 때 생각할 수없는 고정 버그 및 엣지 사례를 활용하는 것이 일반적입니다.

일부 사람들은 단순히 클래스를 변경하기 위해 ~ 50KB 프레임 워크를 추가하는 것이 과도하다고 생각하지만, 상당한 양의 JavaScript 작업을 수행하거나 비정상적인 브라우저 간 동작이있는 경우에는 고려할 가치가 있습니다.

(거의 대략적으로, 라이브러리는 특정 작업을 위해 설계된 도구 세트이며, 프레임 워크는 일반적으로 여러 라이브러리를 포함하고 완전한 의무 세트를 수행합니다.)

위의 예제는 아마도 가장 일반적으로 사용되는 JavaScript 라이브러리 인 jQuery를 사용하여 아래에서 재현되었습니다 (조사 할 가치가있는 다른 것들도 있음).

( $여기에 jQuery 객체가 있습니다.)

jQuery로 클래스 변경 :

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

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

if ( $('#MyElement').hasClass('MyClass') )

또한 jQuery는 클래스가 적용되지 않는 경우 클래스를 추가하거나 제거하는 클래스를 제거하는 바로 가기를 제공합니다.

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


jQuery를 사용하여 클릭 이벤트에 함수 할당 :

$('#MyElement').click(changeClass);

또는 ID가 필요하지 않은 경우 :

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



105
큰 대답 피터. 한가지 질문은 ... 왜 자바 스크립트보다 JQuery를 사용하는 것이 더 낫 습니까? JQuery는 훌륭하지만 이것이 필요한 경우 몇 줄의 JavaScript 대신 전체 JQuery libray를 포함시키는 것이 무엇입니까?
mattstuehler

23
@mattstuehler 1) "더 나은 x"라는 구절은 종종 "더 나은 x"를 의미합니다. 2) 문제의 핵심을 이해하기 위해 jQuery는 DOM에 액세스 / 조작하는 데 도움이되도록 설계되었으며, 종종 이러한 작업을 한 번 수행 해야하는 경우 모든 곳에서 수행해야합니다.
Barry

31
이 솔루션의 한 가지 버그 : 버튼을 여러 번 클릭하면 "MyClass"클래스가 요소에 이미 여러 번 있는지 확인하는 대신 여러 번 요소에 추가됩니다. 따라서 다음과 같은 HTML 클래스 속성으로 끝날 수 있습니다.class="button MyClass MyClass MyClass"
Web_Designer

35
클래스 'myClass'를 제거하려고하고 클래스 'prefix-myClass'가있는 경우 클래스를 제거하기 위해 위에서 지정한 정규식은 className에 'prefix-'를 남겨 둡니다. : O
jinglesthula

16
와우, 3 년과 183 년은 찬성했고 아무도 지금까지 그것을 발견하지 못했습니다. 감사합니다 jinglesthula, 클래스 이름의 일부를 잘못 제거하지 않도록 정규 표현식을 수정했습니다. // 이것이 jQuery와 같은 프레임 워크가 왜 가치가 있는지에 대한 좋은 예라고 생각합니다. 이와 같은 버그는 더 빨리 잡히고 수정되며 일반 코드를 변경할 필요가 없습니다.
피터 Boughton

422

당신은 또한 할 수 있습니다 :

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

그리고 클래스를 토글하려면 (존재하는 경우 제거하고 추가하십시오) :

document.getElementById('id').classList.toggle('class');

63
나는 이것이 HTML5에 의존한다고 생각합니다.
John

12
엘리 그레이의 classList심이 필요합니다 .
ELLIOTTCABLE

15
모질라 개발자 네트워크 (Mozilla Developer Network) 는 기본적으로 10 미만의 Internet Explorer에서는 작동하지 않는다고 말합니다. 테스트에서 진술 내용이 사실임을 알게되었습니다. Internet Explorer 8-9 에는 Eli Gray shim 이 필요합니다. 불행히도, 나는 그의 사이트에서 그것을 찾을 수 없었습니다 (검색조차도). 심은 Mozilla 링크에서 사용할 수 있습니다.
doubleJ


4
atow "classList"는 IE10 +에서 부분적으로 지원됩니다; Opera Mini를 지원하지 않습니다. 나머지 표준 브라우저에서 완벽하게 지원 : caniuse.com/#search=classlist
Nick Humphrey

119

jQuery를 사용하지 않은 이전 프로젝트 중 하나에서 요소에 클래스가 있는지 추가, 제거 및 확인하기 위해 다음 함수를 작성했습니다.

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, ' ');
    }
}

예를 들어 onclick버튼에 클래스를 추가하려면 다음을 사용할 수 있습니다.

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

지금까지는 jQuery를 사용하는 것이 좋습니다.


8
이것은 클라이언트가 jQuery를 사용할 수 없을 때 유용합니다. (당신은 거의 자신의 도서관을
Mike

1
@Mike 클라이언트가 jQuery를 사용하도록 허용하지 않으면 필요한 기능 만 자신의 라이브러리로 이동하여 다시 작성할 수 있습니까?
kfrncs

5
@kfrncs 일반적으로 그렇게 큰 프레임 워크가 필요하지 않기 때문입니다. 내가 생각한 프로젝트의 경우 필요한 유일한 함수는 3 개의 classname (has, add, remove) 함수와 cookie (has, add, remove) 함수였습니다. 다른 모든 것은 사용자 정의이거나 기본적으로 잘 지원되었습니다. 따라서 주석을 포함하여 축소하기 전에 모든 것이 함께 150 줄에 불과했습니다.
Mike

2
친구, 새벽 4시, 고마워 바닐라 JS는 우리 프로젝트에서 사용하고 있으며 이것은 생명의 은인이었습니다.
LessQuesar

이것이 내가 가장 좋아하는 솔루션입니다. 나는 모든 곳에서 사용합니다. 프로젝트에 아직 다른 방법이없는 경우 클래스를 추가하고 제거하는 가장 우아한 방법이라고 생각합니다.
WebWanderer

77

다음 node.className과 같이 사용할 수 있습니다 .

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

이것은 PPK 에 따라 IE5.5 이상에서 작동해야합니다 .


11
이것은 객체의 다른 모든 클래스를 덮어 쓸 것입니다 ... 그래서 그렇게 간단하지 않습니다.
Eric Sebasta

51

와, 여기에 너무 많은 과잉 답변이 있다는 것에 놀랐습니다.

<div class="firstClass" onclick="this.className='secondClass'">

14
나는 예제 코드를 작성하는 데 방해가되지 않는 자바 스크립트가 끔찍한 연습이라고 말할 것이다 ...
Gabe

22
예제 코드가 좋은 예제를 설정해야한다고 생각하기 때문에 동의하지 않습니다.
thomasrutter

1
좋은 예는 동시에 상상력을 가르치고 자극해야합니다. 생각을 대체하지 말고 영감을 주어야합니다.
Anthony Rutledge

4
다른 답변은 과잉이 아니며 기존 클래스를 요소에 유지합니다.
gcampbell 2016 년

47

순수한 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);
    }
}

33

이것은 나를 위해 일하고 있습니다 :

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

    currTabElem.setAttribute("class", "some_class_name");
    currTabElem.setAttribute("className", "some_class_name");
}

훌륭한 답변! 그냥 추가 왼쪽 : 선택 클래스 요소 그룹에 대한 스타일을 지정하는 각 CSS 클래스 이름을 설정
로마 폴란드.

이것은 FF에서 저에게 효과적이지만 el.className = "newStyle"; 왜 안됐어?
Lukasz 'Severiaan'Grela

1
el.setAttribute('class', newClass)더 잘 사용할 수 있습니다 el.className = newClass. 그러나 아닙니다 el.setAttribute('className', newClass).
Oriol

20

또한 클래스를 추가, 제거, 토글 및 확인하는 메소드 ( gist ) 를 추가하기 위해 HTMLElement 객체를 확장 할 수 있습니다 .

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);
}

그런 다음 다음과 같이 사용하십시오 (클릭하면 클래스를 추가하거나 제거합니다).

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

여기 데모가 있습니다.


1
이 사람은 ... 조금 자세한 ... 여기에 아주 간결 솔루션입니다 jsfiddle.net/jdniki/UaT3P
zero_cool

5
@Jackson_Sandland 미안하지만 jQuery를 전혀 사용하지 않는 요점을 완전히 놓쳤습니다.
moka

17

다른 인기있는 프레임 워크 인 Google Closures의 정보를 추가하려면 dom / classes 클래스를 참조하십시오 .

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

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

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

요소를 선택하는 한 가지 옵션 은 CSS3 선택기와 함께 goog.dom.query 를 사용하는 입니다.

var myElement = goog.dom.query("#MyElement")[0];

14

이전 정규식에 대한 몇 가지 사소한 참고 사항과 조정 사항 :

클래스 목록의 클래스 이름이 두 번 이상인 경우 전역 적으로 수행하려고합니다. 또한 클래스 목록의 끝에서 공백을 제거하고 여러 공백을 하나의 공백으로 변환하여 공백이 발생하지 않도록 할 수 있습니다. 클래스 이름으로 코드를 지정하는 유일한 코드가 아래의 정규 표현식을 사용하고 이름을 추가하기 전에 제거하면 문제가되지 않습니다. 그러나. 누가, 누가 수업 명 목록을 가지고 있을지 알고 있습니다.

이 정규식은 대소 문자를 구분하지 않으므로 클래스 이름의 대소 문자를 신경 쓰지 않는 브라우저에서 코드를 사용하기 전에 클래스 이름의 버그가 나타날 수 있습니다.

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, ' ') + "]");

13

ASP.NET 에서 JavaScript로 요소의 CSS 클래스를 변경하십시오 .

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

13

jQuery를 사용하여 다음과 같이 작성합니다.

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

이 코드는 id some-element의 요소 가 클릭 될 때 호출 될 함수를 추가합니다 . 이 함수는 요소의 일부가 아닌 경우 요소의 클래스 속성 에 clicked 를 추가 하고 해당 요소가 있으면 제거합니다.

예,이 코드를 사용하려면 페이지에 jQuery 라이브러리에 대한 참조를 추가해야하지만 최소한 라이브러리의 대부분의 기능이 거의 모든 최신 브라우저에서 작동한다는 확신을 가질 수 있으며 구현 시간을 절약 할 수 있습니다 동일한 코드를 작성하십시오.

감사


8
당신은 쓸 필요가 jQuery한 번 긴 형태로. 모든 경우에 함수 내에서 jQuery(function($) { });사용 $가능합니다.
ThiefMaster

10

라인

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

해야한다:

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

8
잘못되었습니다. 정규식은 슬래시로 표시됩니다. 따옴표를 추가하면 IE에서 따옴표가 실패하여 실제로 클래스를 제거하는 대신 제거하려는 클래스의 문자열을 반환합니다.
Dylan

9

IE6 지원으로 바닐라 자바 ​​스크립트에서 요소 클래스 변경

attributesIE6조차도 이전 브라우저와의 호환성을 유지 하기 위해 노드 속성 을 사용하려고 할 수 있습니다 .

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>


8

완전히 작동하는 내 버전은 다음과 같습니다.

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
}

용법:

<tr onmouseover='addHTMLClass(this,"clsSelected")'
onmouseout='removeHTMLClass(this,"clsSelected")' >

4
class foobar를 제거하려고하면 클래스가 중단됩니다 foo. 내장 이벤트 핸들러 속성의 JS가 편집되기 전에 깨졌습니다. 4 살짜리 대답이 훨씬 좋습니다.
Quentin

1
고마워, 나는 그것을 고쳤다 (접두사 문제가 아님). 정규 표현식에 버그가있는 오래된 승인 된 답변입니다.
alfred

코드에 여전히 foobar문제가 있습니다. 여기
rosell.dk

8

다음은 요소에서 클래스를 토글 / 추가 / 제거하는 toggleClass입니다.

// 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;
}

jsfiddle 참조

또한 새로운 클래스를 동적으로 생성하는 여기에 대한 답변을 참조하십시오.


6

내 코드에서 다음 바닐라 JavaScript 함수를 사용합니다. 정규식을 사용 indexOf하지만 정규식에 특수 문자를 인용 할 필요는 없습니다.

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, "");
    }
}

최신 브라우저에서 element.classList 를 사용할 수도 있습니다 .


3

옵션.

다음은 사용 가능한 옵션이 무엇이며 classList원하는 것을 수행 하는 데 사용하는 방법을 보여주는 작은 스타일 vs. classList 예제 입니다.

style vs. classList

의 차이 styleclassList함께 있다는 것입니다 style당신이 요소의 스타일 속성에 추가하고 있지만 classList좀 요소의 클래스 (들)를 제어한다 ( add, remove, toggle, contain), 내가 사용하는 방법을 보여줍니다 add하고 remove있습니다 그 때문에 방법을 인기있는 것들.


스타일 예

margin-top요소 에 속성 을 추가 하려면 다음과 같이하십시오.

// 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.

classList 예제

우리는이 말을하자 <div class="class-a class-b">,이 경우, 우리는 이미 우리의 div 요소에 추가 2 개 수업을, class-a그리고 class-b, 우리는 어떤 클래스 제어하려는 remove및에 어떤 클래스를 add. 여기가classList 편리한 입니다.

없애다 class-b

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

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

더하다 class-c

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

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


1

나는 이것을 이것을 던질 것이라고 생각했다.

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(' ');
}

1

단지 말을 myElement.classList="new-class"당신이 사용할 수있는 경우 기존의 클래스를 유지하기 위해 필요하지 않는 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>


1

좋아,이 경우 jQuery를 사용하거나 순수 자바 스크립트로 자신의 Methods를 작성해야한다고 생각합니다. 다른 이유로 필요하지 않으면 모든 jQuery를 내 응용 프로그램에 주입하는 대신 내 자신의 메소드를 추가하는 것이 좋습니다.

jQuery와 비슷한 클래스 추가, 클래스 삭제 등을 처리하는 기능을 거의 추가하지 않기 위해 자바 스크립트 프레임 워크에 대한 메소드로 아래와 같은 작업을 수행하고 싶습니다. 브라우저가 그것을 지원하거나 babel과 같은 것을 사용하도록하려면 코드에서 ES5 구문을 사용해야합니다.이 방법으로도 ID를 통해 요소를 찾습니다. 요소를 선택하려면 요소를 선택해야합니다.

//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);
  }

}

그리고 아래처럼 use를 호출하고 요소에 'id'와 'class'의 클래스가 있다고 가정하고 문자열로 전달했는지 확인하십시오. 아래와 같이 util을 사용할 수 있습니다.

classUtil.addClass('myId', 'myClass');
classUtil.removeClass('myId', 'myClass');
classUtil.hasClass('myId', 'myClass');
classUtil.toggleClass('myId', 'myClass');

1

classList DOM API :

클래스를 추가하고 제거하는 매우 편리한 방법은 classListDOM API입니다. 이 API를 사용하면 javascript를 사용하여 목록을 수정하기 위해 특정 DOM 요소의 모든 클래스를 선택할 수 있습니다. 예를 들면 다음과 같습니다.

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

우리는 로그에서 요소의 클래스뿐만 아니라 많은 보조 메소드와 속성을 가진 객체를 되찾고 있음을 알 수 있습니다. 이 객체는 인터페이스 DOMTokenList 에서 상속받습니다. 는 DOM에서 공백으로 구분 된 토큰 세트 (예 : 클래스)를 나타내는 데 사용됩니다.

예:

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>
  


1

예, 여러 가지 방법이 있습니다. ES6 구문에서는 쉽게 달성 할 수 있습니다. 이 코드 토글을 사용하여 클래스를 추가 및 제거하십시오.

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>


1
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, '');
}

위의 허용 된 답변을 사용하면 클래스를 추가하고 제거하는 간단한 크로스 브라우저 기능이 있습니다.

수업 추가 :

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

수업 제거 :

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

1

많은 답변, 많은 좋은 답변.

TL; DR :

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

또는

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

그게 다야.

그리고 왜 그 이유를 알고 자신을 교육하고 싶다면 Peter Boughton의 답변을 읽는 것이 좋습니다 . 완벽합니다.

참고 :
( document 또는 event )를 사용 하면 가능합니다 .

  • getElementById()
  • getElementsByClassName()
  • querySelector()
  • querySelectorAll()

1

HTML 요소의 클래스 이름을 변경하기 위해 javascript에 className 속성이 있습니다 . 기존 클래스 값은 className에 지정한 새 값으로 대체됩니다.

<!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>

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


1

OP 질문은 JavaScript로 요소의 클래스를 어떻게 변경할 수 있습니까?

최신 브라우저에서는 한 줄의 자바 스크립트 로이 작업을 수행 할 수 있습니다 .

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

classList속성은 다양한 메소드 가있는 DOMTokenList를 제공 합니다 . add () , remove () 또는 replace () 와 같은 간단한 조작을 사용하여 요소의 classList를 조작 할 수 있습니다 . 또는 keys () , values ​​() , entries () 가있는 객체 또는 Map과 같이 매우 정교하고 클래스를 조작하십시오.

Peter Boughton의 답변 은 대단하지만 지금은 10 년이 넘었습니다. 모든 최신 브라우저는 이제 DOMTokenList를 지원합니다-https://caniuse.com/#search=classList를 참조 하십시오. 심지어 IE11에서도 일부 DOMTokenList 메소드를 지원합니다


1

시험

element.className='second'


-2

작동하는 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>

이 링크 에서 작동 코드를 다운로드 할 수 있습니다 .


1
이것은 둘 이상의 클래스를 가진 요소를 손상시킵니다.
gcampbell 2016 년

-4

다음은 간단한 jQuery 코드입니다.

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

여기,

  • Class1은 이벤트의 리스너입니다.
  • 부모 클래스는 변경하려는 클래스를 호스팅하는 클래스입니다.
  • Classtoremove는 이전 클래스입니다.
  • 추가 할 클래스는 추가하려는 새 클래스입니다.
  • 100은 클래스가 변경되는 시간 종료 지연입니다.

행운을 빕니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.