私はしばらくjQueryを使用してきましたが、今は純粋なJavaScriptで何かを書きたいと思っていますが、それはやりがいがあります。現在、私の最大の問題の1つは、設定/変更する方法を見つけられなかったことです。クラスのスタイリング。これはidを持つ要素の問題ではありませんが、idを持つ1つの要素だけでなく、同じクラスを持つ要素のグループのスタイルを変更したいと思います。jQueryでは、次のように記述します。
$('.someClass').css('color','red')
純粋なjsでこれに単純な同等性は本当にありませんか?
以下をお試しください
var all = document.getElementsByClassName('someClass');
for (var i = 0; i < all.length; i++) {
all[i].style.color = 'red';
}
注:Cheeryが指摘したように、getElementsByClassName
はIEでは機能しません。リンクされた質問には、この制限を回避する良い方法があります
var all = document.getElementsByClassName('someClass');
for (var i = 0; i < all.length; i++) {
all[i].className += " red";
}
より良いコーディングスタイルを得るには、上記のコードを使用して要素に別のクラスを追加し、CSSを使用して次のようにすべての要素の色を変更します。
.red {
color:red;
}
Sizzle: http://sizzlejs.com/ などのセレクターライブラリを使用できますが、純粋なJSが必要な場合は、すべての要素を取得して、プログラムで「手摘み」していると思います。たとえば、次のようにRegExを使用したいクラス:
これはJQueryワンライナーと同等です:
for( i in document.all) document.all[i].className && /\bpost-text\b/g.test(document.all[i].className) && (document.all[i].style.color = "red")
:)
1行で必要ない場合は、より速くすることができます(、はるかに読みやすくします):
var myClassName = "someClass";
var regexp = RegExp("\\b"+myClassName+"\\b/g");
var elements = document.all;
for( i in elements){
var this_element = elements[i];
if(regexp.test(this_element.className){
this_element.style.color = "red";
}
}
"for(i in object)"が機能しない場合は、クラシックforループ "forを使用してください(var i = 0; i <elements.length; i ++) "。
'beautified'のように、少し高度なJSの概念を使用して(配列関数のマッピング、折りたたみなど )、コーディングしているJSバージョンは何ですか? ECMA Script 5ではないようですね。
また、この質問/回答を確認してください 特定のCSSクラスを使用してHTMLドキュメントのすべての要素を取得
変更したいのはスタイルシートですね。それはJavascriptで可能です、を参照してください
そのためのライブラリはありません。本当に見たいと思います...
以下を使用できます。
document.getElementById("MyElement").className = "NewClass";
要素のクラスを変更し、CSSファイルでその新しいクラスのスタイルを定義するだけ