JavaScriptで要素のクラスを変更するにはどうすればよいですか?


2776

onclickJavaScriptを使用してイベントに応答してHTML要素のクラスを変更するにはどうすればよいですか?


28
「クラス属性は、主にスタイルシートのクラスを指すために使用されます。ただし、JavaScriptによって(HTML DOMを介して)指定されたクラスのHTML要素に変更を加えるために使用することもできます。」- w3schools.com/tags/att_standard_class.asp
Triynko

11
element.setAttribute(name, value); 交換してくださいnameclassvalue引用符で囲んだ、クラスに付けた名前に置き換えます。これにより、現在のクラスを削除して別のクラスを追加する必要がなくなります。このjsFiddleの例は、完全に機能するコードを示しています。
アランウェルズ2014年

3
onClickでHTML要素のクラスを変更するには、次のコードを使用します<input type='button' onclick='addNewClass(this)' value='Create' />function addNewClass(elem){ elem.className="newClass";
。JavaScriptの

@Triynko-w3schoolsのリンクが変更され、2012年9月のように表示されます。2012年9月12日のArchive.orgのページは次のとおりです。HTMLクラスAttribute-w3schools。これがw3schools.comの置換ページへのリンクです:HTMLクラスAttribute-w3schools
Kevin Fegan

回答:


3881

クラスを変更するための最新の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代わりに単に使用することもできます。ただし、これについて詳しく説明することは範囲外です答えの。

要素のすべてのクラスを変更するには:

既存のすべてのクラスを1つ以上の新しいクラスに置き換えるには、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イベントに割り当てる:

JavaScriptをHTMLイベント属性(などonclick="this.className+=' MyClass'")内に直接書き込むことは可能ですが、これは推奨される動作ではありません。特に大規模なアプリケーションでは、JavaScript対話ロジックからHTMLマークアップを分離することで、より保守しやすいコードが実現されます。

これを実現するための最初のステップは、関数を作成し、onclick属性で関数を呼び出すことです。次に例を示します。

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

(このコードをスクリプトタグに含める必要はありません。これは単に例を簡潔にするためであり、JavaScriptを個別のファイルに含める方が適切な場合があります。)

2番目のステップは、たとえばaddEventListenerを使用して、onclickイベントをHTMLからJavaScriptに移動することです。

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

(HTMLのロードが完了したにその関数のコンテンツが実行されるようにwindow.onloadパーツが必要です。これがないと、JavaScriptコードが呼び出されたときにMyElementが存在しない可能性があるため、行が失敗します。)


JavaScriptフレームワークとライブラリ

上記のコードはすべて標準のJavaScriptで記述されていますが、フレームワークまたはライブラリを使用して一般的なタスクを簡略化し、コードの作成時に考えられない可能性がある修正済みのバグやエッジケースを活用することは一般的です。

一部の人々は単にクラスを変更するために最大50 KBのフレームワークを追加するのはやり過ぎだと考えていますが、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
ピーター、素晴らしい答えです。1つの質問...なぜJavaScriptよりもJQueryの方が良いのですか?JQueryは素晴らしいですが、これで十分な場合は、JavaScriptの数行ではなく、JQueryライブラリ全体を含めて何が正当化されるのでしょうか。
mattstuehler

23
@mattstuehler 1)「better yet x」というフレーズは、多くの場合「better yet(you can)x」を意味します。2)問題の核心をつかむために、jQueryはDOMへのアクセス/操作を支援するように設計されており、非常に頻繁に、この種のことをすべての場所で行う必要がある場合に行う必要があります。
バリー

31
このソリューションの1つのバグ:ボタンを複数回クリックすると、「MyClass」のクラスが要素に複数回追加され、すでに存在するかどうかを確認するのではありません。したがって、あなたはこのような何かを探しているHTMLクラス属性で終わることができます:class="button MyClass MyClass MyClass"
Web_Designer

35
クラス 'myClass'を削除しようとしていて、クラス 'prefix-myClass'がある場合、クラスを削除するために上記で指定した正規表現を使用すると、classNameに '
prefix-

16
うわー、3年と183の賛成票。jinglesthulaに感謝します。クラス名の一部が誤って削除されないように、正規表現を修正しました。//これは、フレームワーク(jQueryなど)を使用する価値のある良い例だと思います。このようなバグはより早く検出および修正され、通常のコードを変更する必要はありません。
Peter Boughton、2011

422

あなたも行うことができます:

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

クラスを切り替えるには(存在する場合は削除し、それ以外の場合は追加します):

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

63
これはHTML5に依存していると思います。
John

12
Eli GreyのclassListシムが必要です。
ELLIOTTCABLE

15
Mozilla Developer Networkによると、10未満のInternet Explorerではネイティブでは機能しないとのことですが、私のテストでは、その記述は真実であることがわかりました。どうやら、Eli GreyシムはInternet Explorer 8〜9に必要です。残念ながら、私は彼のサイトでそれを見つけることができませんでした(検索しても)。シムはMozillaリンクから入手できます。
doubleJ 2012年


4
atow "classList"はIE10 +で部分的にサポートされています。Opera Miniはサポートされていません。それ以外の場合は、残りの標準ブラウザーでの完全サポート:caniuse.com/#search=classlist
Nick Humphrey

119

jQueryを使用しなかった古いプロジェクトの1つで、要素にクラスがあるかどうかを追加、削除、およびチェックするための次の関数を作成しました。

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 2013年

5
@kfrncs私は通常、それほど大きなフレームワークを必要としないからです。私が考えていたプロジェクトで必要なのは、3つのクラス名(has、add、remove)関数とcookie(has、add、remove)関数だけでした。それ以外はすべてカスタムであるか、ネイティブで十分サポートされていました。つまり、コメントを含めて、縮小前のすべてが150行しかありませんでした。
マイク

2
おい、その午前4時、ありがとうございました。バニラJSは私たちのプロジェクトで使用しているものであり、これは命の恩人でした。
LessQuesar

これは私のお気に入りのソリューションです。どこでも使っています。プロジェクトに別の方法がない場合に、クラスを追加および削除する最もエレガントな方法だと思います。
WebWanderer 2017年

77

次のnode.classNameように使用できます:

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

これは、PPKに従ってIE5.5以降で機能するはずです。


11
これにより、オブジェクト上の他のすべてのクラスが上書きされます...そのため、それほど単純ではありません。
Eric Sebasta

51

うわー、ここにはたくさんの答えがたくさんあることに驚いています...

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

14
私は控えめなjavascriptがサンプルコードを書くためのひどい習慣だと思います...
Gabe

22
サンプルコードは良い例を設定するべきだと思うので、私は同意しません。
thomasrutter 2015年

1
良い例は、同時に想像力を指示し、刺激する必要があります。それは思考に取って代わるべきではありませんが、それを刺激します。
Anthony Rutledge、2015年

4
他の答えはやり過ぎではなく、要素の既存のクラスも保持します。
gcampbell

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クラス名に設定して、クラス要素のグループのスタイルを指定します
Roman Polen。

これは私にとってFFで機能しますが、el.className = "newStyle";を使用しようとしたときです。うまくいかなかったのはなぜですか?
Lukasz 'Severiaan' Grela '19 / 07/12

1
あなたは使用することができel.setAttribute('class', newClass)、より良いですかel.className = newClass。しかし、そうではありませんel.setAttribute('className', newClass)
Oriol

20

同様に、HTMLElementオブジェクトを拡張して、クラスを追加、削除、切り替え、チェックするメソッドを追加することもできます(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);
}

そして、次のように使用します(クリックするとクラスが追加または削除されます):

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

こちらがデモです。


1
これは少し冗長です...これは非常に簡潔な解決策です... jsfiddle.net/jdniki/UaT3P
zero_cool

5
@Jackson_Sandlandは申し訳ありませんが、jQueryをまったく使用しないという要点を完全に逃しました。
moka 14

17

もう1つの一般的なフレームワークである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)

要素を選択する1つのオプションは、CSS3セレクターでgoog.dom.queryを使用することです。

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

14

以前の正規表現に関するいくつかのマイナーなメモと微調整:

クラスリストにクラス名が2回以上ある場合は、グローバルに実行することをお勧めします。また、クラスリストの末尾からスペースを取り除き、複数のスペースを1つのスペースに変換して、スペースのランを取得しないようにすることもできます。クラス名でディンキングする唯一のコードが以下の正規表現を使用し、追加する前に名前を削除する場合、これらの問題は問題になりません。だが。ええと、誰がクラス名リストを食べているのか知っています。

この正規表現は大文字と小文字を区別しないため、クラス名の大文字と小文字を区別しないブラウザでコードを使用する前に、クラス名のバグが表示される場合があります。

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の要素がクリックされたときに呼び出される関数を追加します。この関数は、要素のclass属性にクリックされていない場合はクリックして追加し、存在する場合は削除します。

はい、このコードを使用するには、ページに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
不正解です。RegExはスラッシュで区切られています。引用符を追加するとIEで失敗し、実際にクラスを削除するのではなく、削除しようとしているクラスの文字列が返されます。
ディラン

9

IE6をサポートするバニラJavaScriptで要素のクラスを変更する

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
クラスfoobarを削除しようとすると、クラスが壊れますfoo。組み込みイベントハンドラー属性のJSが編集される前に壊れていました。4年前に受け入れられた回答の方がはるかに優れています。
クエンティン

1
おかげで、私はそれを修正しました(接頭辞の問題ではありません)。正規表現にバグがあるのは、以前に受け入れられた回答です。
2012年

コードにはまだ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に応じて使用する方法を確認するための小さなスタイルとclassListの例です。

styleclassList

違いstyleとはclassListしていることであるstyleあなたは要素のスタイルプロパティに追加していますが、classListちょっと要素のクラス(複数可)を制御している(addremovetogglecontain)、私が使用する方法を説明しますaddremoveしているこれらのことから方法を人気のもの。


スタイルの例

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

OK、この場合、jQueryを使用するか、独自のメソッドを純粋なJavaScriptで記述する必要があると思います。私の好みは、他の理由で必要がない場合、アプリケーションにすべてのjQueryを注入するのではなく、独自のメソッドを追加することです。

クラスの追加、クラスの削除などを処理するいくつかの機能をjQueryに追加するために、JavaScriptフレームワークに以下のようなメソッドを実行したいのですが、これはIE9 +で完全にサポートされています。また、私のコードはES6で記述されているため、必要です。ブラウザがそれをサポートしていること、またはbabelなどを使用していることを確認するには、コードでES5構文を使用する必要があります。この方法でも、IDを介して要素を検索します。つまり、要素を選択するには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);
  }

}

そして、あなたは単にそれらを以下のように呼び出すことができます、あなたの要素が 'id'の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');

それでおしまい。

そして、あなたが本当にその理由を知り、自分自身を教育したいのなら、私はピーター・ボートンの答えを読むことを勧めます、それは完璧です。

注:
これは(ドキュメントまたはイベント)で可能です。

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

1

JavaScriptには、HTML要素のクラスの名前を変更するためのプロパティ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で要素のクラスを変更するにどうすればよいですか?

最近のブラウザでは、1行のjavascriptでこれを行うことができます。

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

このclassList属性は、さまざまなメソッドを持つDOMTokenListを提供しますadd()remove()、またはreplace()などの単純な操作を使用して、要素のclassListを操作できます。または、keys()values()entries()使用してオブジェクトまたはマップのように非常に洗練されたクラスを操作します

Peter Boughtonの答えは素晴らしいものですが、今では10年以上前のものです。最新のすべてのブラウザーがDOMTokenListをサポートするようになりました-https : //caniuse.com/#search=classListを参照してください。IE11でも一部のDOMTokenListメソッドをサポートしています



-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

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