JavaScriptを使用して要素のスタイル属性を動的に変更する


117

divの特定のスタイルシートを持っています。次に、jsを使用してdivの1つの属性を動的に変更します。

どうすればできますか?

document.getElementById("xyz").style.padding-top = "10px";

これは正しいです?

回答:


123

それはほぼ正しいです。

-はjavascript演算子であるため、プロパティ名に実際に含めることはできません。あなたが設定している場合、borderまたは代わりにそのような一語の何かである場合、コードはうまく機能します。

ただし、padding-topハイフン付きの属性名について覚えておく必要があるのは、JavaScriptではハイフンを削除し、次の文字を大文字にするためpaddingTopです。

他にもいくつかの例外があります。JavaScriptにはいくつかの予約語があるためfloat、たとえば、そのように設定することはできません。代わりに、一部のブラウザでは、あなたが使用する必要があるcssFloatと他の人にstyleFloat。ブラウザの非互換性を処理するjQueryなどのフレームワークを使用することをお勧めするのは、このような不一致のためです...


213

他の回答に加えて、スタイルプロパティにダッシュ表記を使用したい場合は、次のものも使用できます。

document.getElementById("xyz").style["padding-top"] = "10px";

3
私もどちらも、これは動的関数には本当に便利です。スタイルを文字列値として渡し、スタイルと値を設定できます。素晴らしいソリューション。
raphie 2013

1
また、@ raphieの発言に加えて、も使用できますdocument.getElementById("xyz").style["paddingTop"] = '10px'
歯ブラシ2014

1
@anunkjn:その通りです。FF ではもう機能しないと思います。それは、まあ……おかしい。
KooiInc 2014

17

私は同様の問題を解決します:

document.getElementById("xyz").style.padding = "10px 0 0 0";

お役に立てば幸いです。


2
この方法の欠点は、反対側のパディングがに設定されること0です。そして、時にはそれを望まない。
Gustavo Straube 2017年


15

次のようなHTMLがあるとします。

<div id='thediv'></div>

このdivのスタイル属性を変更したい場合は、

document.getElementById('thediv').style.[ATTRIBUTE] = '[VALUE]'

[ATTRIBUTE]必要なスタイル属性に置き換えます。「-」を削除し、次の文字を大文字にすることを忘れないでください。

document.getElementById('thediv').style.display = 'none'; //changes the display
document.getElementById('thediv').style.paddingLeft = 'none'; //removes padding

1
受け入れられた回答に記載されているように、いくつかの例外があります。のようにfloat
Gustavo Straube 2017年

8
document.getElementById("xyz").style.padding-top = '10px';

になります

document.getElementById("xyz").style["paddingTop"] = '10px';

7

これを処理するには、要素IDとCSSプロパティを含むオブジェクトを受け入れる関数を使用することをお勧めします。このようにして、一度に複数のスタイルを記述し、標準のCSSプロパティ構文を使用します。

//function to handle multiple styles
function setStyle(elId, propertyObject) {
    var el = document.getElementById(elId);
    for (var property in propertyObject) {
        el.style[property] = propertyObject[property];
    }
}

setStyle('xyz', {'padding-top': '10px'});

さらに良いのは、スタイルを変数に格納して、プロパティ管理をはるかに簡単にすることです。

var xyzStyles = {'padding-top':'10px'}
setStyle('xyz', xyzStyles);

それが役に立てば幸い


7

以下のクエリセレクター方法のソリューションが表示されなかったことに驚いた、

document.querySelector('#xyz').style.paddingTop = "10px"

CSSStyleDeclarationソリューション、受け入れられた回答の例

document.getElementById('xyz').style.paddingTop = "10px";

5
document.getElementById("xyz").setAttribute('style','padding-top:10px');

仕事もします。


5
この方法の欠点は、他のインラインスタイルが削除されることです。これは、属性値全体を置き換えるためです。私は、現在のスタイルを取得し、設定するプロパティの既存の値を確認してから、目的の値で追加/置換することをお勧めします。
Gustavo Straube 2017年

同意した。しかしOPは、ユースケースを考慮に入れていない、彼がすでに行っていることにより近いソリューションを必要としていました。これはそれを達成するための最も簡単な方法の1つですが、確かに最善ではありません。
Pinkesh Badjatiya 2017年

@GustavoStraube、私はそれをマイナス面とは呼びません。多くの場合、これはまさに開発者がやりたいことです。つまり、要素のスタイルを上書きします。私はそれをこのようにした結果だと思います。
stwr667

5
document.getElementById('id').style = 'left: 55%; z-index: 999; overflow: hidden; width: 0px; height: 0px; opacity: 0; display: none;';

私のために働く

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.