JavaScript kullanarak bir HTML öğesine bir öznitelik nasıl eklenir / güncellenir?


128

JavaScript kullanarak özellik ekleyecek / güncelleyecek bir yol bulmaya çalışıyorum. Bunu setAttribute()işlevle yapabileceğimi biliyorum ama bu IE'de çalışmıyor.

Yanıtlar:


163

Burada , IE de dahil olmak üzere birçok farklı tarayıcıdaki özniteliklerin davranışını okuyabilirsiniz .

element.setAttribute()IE'de bile hile yapmalı. Onu denedin mi? Eğer işe yaramazsa, o zaman belki element.attributeName = 'value'işe yarayabilir.


5
bu çalışıyor. yoksa öznitelik oluşturur ve varsa günceller. Bu, nasıl çalıştığı konusunda bir yerde belgelenmiş mi?
dev.e.loper

@ dev.e.loper DOM spec, başlamak için iyi bir yerdir: w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/…
valentinas

1
Aşağıdakileri yaptığımda: document.getElementById("nav").setAttribute("class", "active");Chrome JS konsolunda çalışıyor, ancak gerçek sayfada çalışmıyor ... herhangi bir fikir? Bu arada, gerçek sayfaya kapsamın .jssonundan önce dosyayı bodyekliyorum.
bilinenasilya

36

Tamamen uyumlu olmak istiyorsanız, kolay görünen şey aslında aldatıcıdır.

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

Eklemek için bir 'div1' kimliğiniz olduğunu varsayalım.

e['id'] = 'div1';
e.id = 'div1';
e.attributes['id'] = 'div1';
e.createAttribute('id','div1')
Bunların tümü, IE 5.5'teki sonuncusu dışında çalışacaktır (bu noktada eski tarih, ancak hala güncelleme olmadan XP'nin varsayılanıdır).

Ama tabii ki beklenmedik durumlar var. 8'den önce IE'de çalışmaz: e.attributes['style'] Hata olmaz ama sınıfı gerçekten ayarlamaz, className: olmalıdır e['class'].
Ancak, öznitelikleri kullanıyorsanız, bu ÇALIŞACAKTIR:e.attributes['class']

Özetle, nitelikleri gerçek ve nesne odaklı olarak düşünün.

Kelimenin tam anlamıyla, sadece x = 'y'yi tükürmesini ve bunun hakkında düşünmemesini istersiniz. Bu, setAttribute, createAttribute özniteliklerinin (IE'nin stil istisnası hariç) olduğu şeydir. Ancak bunlar gerçekten nesneler olduğu için işler karışabilir.

JQuery innerHTML slop yerine düzgün bir DOM öğesi oluşturma zahmetine gireceğiniz için, onu bir öğe olarak ele alacağım ve e.className = 'fooClass' ve e.id = 'fooID' ile devam edeceğim. Bu bir tasarım tercihidir, ancak bu durumda, bir nesnenin size karşı çalıştığı gibi davranmaya çalışmaktır.

Diğer yöntemlerde olduğu gibi size asla geri tepmez, sadece sınıfın className ve stilin bir nesne olduğunun farkında olun, böylece style.width, style = "width: 50px" değil. Ayrıca tagName'i de hatırlayın, ancak bu zaten createElement tarafından ayarlandı, bu yüzden endişelenmenize gerek yok.

Bu istediğimden daha uzundu, ancak JS'deki CSS manipülasyonu zor bir iş.


5
Windows XP, 5.5 değil IE6 ile çıktı. Bu korkunç olur.
mgol

Bu ile çalışır iddeğil gibi başka bir şeyle,data-toggle
stallingOne

30

Zorunlu jQuery çözümü . titleÖzniteliği bulur ve ayarlar foo. Bunu id ile yaptığım için bunun tek bir öğe seçtiğine dikkat edin, ancak aynı özniteliği bir koleksiyonda seçiciyi değiştirerek kolayca ayarlayabilirsiniz.

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

3
JQuery çözümü için +1. Benim durumumda, çalışmamın gereklilikleri nedeniyle jQuery'den kaçınmaya ve onu saf javascript'te üretmeye çalışıyordum. Her iki cevabın da var olmasına sevindim. Teşekkürler.
NuclearPeon 01

7

Öznitelikle ne yapmak istiyorsunuz? Bir html niteliği mi yoksa size ait bir şey mi?

Çoğu zaman bunu bir özellik olarak ele alabilirsiniz: bir öğeye bir başlık mı ayarlamak istiyorsunuz? element.title = "foo"yapacağım.

Kendi özel JS öznitelikleriniz için DOM doğal olarak genişletilebilirdir (aka expando = true), bunun basit sonucu, element.myCustomFlag = foobunu sorunsuz bir şekilde yapıp daha sonra okuyabilmenizdir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.