2016-07-09 13 views
4

現在JavaScriptで、私が使用して要素にクラスを追加するために:私はそのコードjQueryのaddClass()以下のようなのような方法で作りたい場合カスタムJavaScript addClass方法

var element = document.getElementById("element"); 

var classes; 
if (element.className.split(" ").indexOf("class") < 0) { 
    classes = element.className.split(" "); 
    classes.push("class"); 
    element.className = classes.join(" "); 
} 

addClass: function(string) { 
    var classes; 
    if (element.className.split(" ").indexOf("class") < 0) { 
     classes = element.className.split(" "); 
     classes.push("class"); 
     element.className = classes.join(" "); 
    } 
} 
オブジェクトのプロトタイプは、私がこのように動作するように、このメソッドを追加する必要があります

れる :

document.getElementById("element").onclick = function() { 
    this.addClass("class"); 
} 
+5

非標準機能を持つ組み込み関数のプロトタイプを拡張すると、混乱するコードになります。私は、あなたが['classList' polyfill](https://github.com/eligrey/classList.js/)を使うか、代わりに要素を引数として取る独自の関数を' addClass'にすることをお勧めします。 – Ryan

+3

'this.classList.add(" class ")' – Oriol

+0

なぜ便利な関数をメソッドとして追加すると、コードが@ RyanO'Haraを混乱させるのですか? –

答えて

4

私は信じていますあなたはElementオブジェクトのプロトタイプ

Element.prototype.addClass = function(className){ 
    // something 
} 
+0

@rvighneありがとう、classNameに変更しました –

+0

@realseanpを絶対に修正してください。私はちょうどテストし、それは動作します!どうもありがとう。 –

+0

あなたが所有していないプロトタイプには追加しないでください。 – zero298

2

使用Element.classList.add()にそれを追加します。

ネイティブでは、IE10以上の最新のブラウザで使用できます。

上記リンクは、サポートされていないすべてのブラウザ用のポリフィルを提供します。

+0

これは受け入れられる回答である必要があります。 polyfillと組み合わせると、これは過去/将来の最も簡単なオプションです。 – Seth

+0

しかし、実際にクラスを追加することについての質問は、「DOM要素にメソッドを追加するにはどうすればよいですか」です。クラスは単なる例ですか? (私は、ネイティブのプロトタイプを拡張することは、広く悪い習慣であると広く考えられていることを知っています。それはそれには同意しますが、それはどうやって行うのかについて明確な答えがないわけではありません。) – nnnnnn

+0

@Seth no it shouldn ' t。私の質問ははっきりしていた。私はクラスを追加する別の方法を求めていませんでしたが、オブジェクトのプロトタイプではそれを行うメソッドを追加する必要があります。しかし、この質問に答えることはできません。 –