JavaScriptを使用してHTML要素に属性を追加/更新する方法は?


128

JavaScriptを使用して属性を追加/更新する方法を見つけようとしています。setAttribute()関数で実行できることはわかっていますが、IEでは機能しません。

回答:


163

あなたは読むことができ、ここで IEを含む多くの異なるブラウザ、内の属性の行動について。

element.setAttribute()IEでも、トリックを行う必要があります。やってみましたか?それが機能しない場合は、おそらく機能する element.attributeName = 'value'可能性があります。


5
これは機能します。存在しない場合は属性を作成し、存在する場合は更新します。これはどのように機能するかについてどこかに文書化されていますか?
dev.e.loper 2009

@ dev.e.loper DOM仕様から始めるのが適切です。w3.org/ TR / 2004 / REC-DOM
valentinas

1
次のようdocument.getElementById("nav").setAttribute("class", "active");にすると、Chrome JSコンソールでは機能しますが、実際のページでは機能しません。ちなみに、実際のページ.jsではbodyスコープ終了前のファイルを入れています。
Knowasilya

36

完全に互換性を保ちたい場合、簡単に見えることは実際にはトリッキーです。

var e = document.createElement('div');

追加する「div1」のIDがあるとします。

e['id'] = 'div1';
e.id = 'div1';
e.attributes['id'] = 'div1';
e.createAttribute('id','div1')
これらはすべて、IE 5.5の最後のバージョン(現時点では古代の歴史ですが、更新されていないXPのデフォルトです)を除いてすべて機能します。

しかし、もちろん偶然性はあります。8より前のIEでは機能しe.attributes['style'] ません。エラーは発生しませんが、実際にはクラスが設定されません。className:である必要がありますe['class']
ただし、属性を使用している場合、これは機能します。e.attributes['class']

要約すると、属性はリテラルでオブジェクト指向であると考えてください。

リテラルでは、x = 'y'を吐き出して、それについて考えたくないだけです。これは、setAttribute、createAttributeの属性です(IEのスタイル例外を除く)。しかし、これらは実際にはオブジェクトなので、混乱する可能性があります。

jQuery innerHTML slopの代わりにDOM要素を適切に作成するのは難しいので、これを1つとして扱い、e.className = 'fooClass'およびe.id = 'fooID'を使用します。これは設計の優先事項ですが、この場合、オブジェクト以外のものが処理されないように処理しようとします。

他のメソッドとは異なり、クラスがclassNameであり、スタイルがオブジェクトであることを認識するだけで、style = "width:50px"ではなくstyle.widthになります。tagNameも覚えておいてください。ただし、これはcreateElementによってすでに設定されているので、心配する必要はありません。

これは思ったよりも長い時間でしたが、JSでのCSSの操作は難しい作業です。


5
Windows XPは5.5ではなく、IE6でリリースされました。それはひどいでしょう。
mgol 2012

これはで機能しid、他の機能では機能しませんdata-toggle
stallingOne

30

必須のjQueryソリューションtitle属性を検索して設定しますfoo。これはIDで行うため、1つの要素を選択しますが、セレクターを変更することでコレクションに同じ属性を簡単に設定できます。

$('#element').attr( 'title', 'foo' );

3
jQueryソリューションの場合は+1。私の場合、自分の作業の要件により、jQueryを避けて純粋なjavascriptで生成しようとしていました。私は両方の答えが存在してうれしいです。ありがとう。
NuclearPeon 2013

7

属性をどのように処理しますか?それはhtml属性ですか、それともあなた自身のものですか?

ほとんどの場合、プロパティとして単にアドレス指定できます。要素にタイトルを設定したいですか?element.title = "foo"それを行います。

独自のカスタムJS属性の場合、DOMは自然に拡張可能(別名expando = true)であり、その簡単な結果は、element.myCustomFlag = foo問題なく実行して後で読み取ることができるということです。

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