Odpowiedzi:
Możesz przeczytać tutaj o zachowaniu atrybutów w wielu różnych przeglądarkach, w tym IE.
element.setAttribute()
powinien załatwić sprawę, nawet w IE. Próbowałeś tego? Jeśli to nie zadziała, może
element.attributeName = 'value'
zadziała.
document.getElementById("nav").setAttribute("class", "active");
działa w konsoli Chrome JS, ale na rzeczywistej stronie nie działa… jakieś pomysły? Nawiasem mówiąc, na właściwej stronie umieszczam .js
plik przed końcem body
zakresu.
To, co wydaje się łatwe, jest w rzeczywistości trudne, jeśli chcesz być w pełni kompatybilny.
var e = document.createElement('div');
Powiedzmy, że masz do dodania identyfikator „div1”.
e['id'] = 'div1';
e.id = 'div1';
e.attributes['id'] = 'div1';
e.createAttribute('id','div1')
Wszystkie one będą działać z wyjątkiem ostatniego w IE 5.5 (który jest starożytną historią w tym momencie, ale nadal jest domyślnym XP bez aktualizacji).
Ale są oczywiście nieprzewidziane okoliczności. Nie działa w IE przed 8: e.attributes['style']
nie będzie błąd, ale nie będzie faktycznie ustawić klasę, to musi być className: e['class']
.
Jeśli jednak używasz atrybutów, to zadziała:e.attributes['class']
Podsumowując, traktuj atrybuty jako dosłowne i zorientowane obiektowo.
Dosłownie chcesz po prostu wypluć x = 'y' i nie myśleć o tym. Do tego służą atrybuty setAttribute, createAttribute (z wyjątkiem wyjątku stylu IE). Ale ponieważ są to naprawdę przedmioty, może się pogubić.
Ponieważ będziesz miał problem z poprawnym utworzeniem elementu DOM zamiast jQuery innerHTML slop, potraktowałbym go tak, jak jeden i trzymałbym się e.className = 'fooClass' i e.id = 'fooID'. To jest preferencja projektowa, ale w tym przypadku próba traktowania jest czymś innym niż obiekt działa przeciwko tobie.
Nigdy nie przyniesie to odwrotnego skutku, tak jak inne metody, po prostu pamiętaj, że klasa to nazwa klasy, a styl jest obiektem, więc jest to style.width, a nie style = "width: 50px". Zapamiętaj również tagName, ale jest to już ustawione przez createElement, więc nie powinieneś się tym martwić.
To trwało dłużej niż chciałem, ale manipulacja CSS w JS to trudna sprawa.
id
czymś innym, a nie z czymś takim jakdata-toggle
Obowiązkowe rozwiązanie jQuery . Znajduje i ustawia title
atrybut na foo
. Zwróć uwagę, że wybiera to pojedynczy element, ponieważ robię to według identyfikatora, ale możesz łatwo ustawić ten sam atrybut w kolekcji, zmieniając selektor.
$('#element').attr( 'title', 'foo' );
Co chcesz zrobić z atrybutem? Czy to atrybut HTML, czy coś własnego?
W większości przypadków możesz po prostu potraktować to jako właściwość: chcesz ustawić tytuł dla elementu? element.title = "foo"
zrobię to.
W przypadku własnych niestandardowych atrybutów JS DOM jest naturalnie rozszerzalny (aka expando = true), czego prostym rezultatem jest to, że możesz to zrobić, element.myCustomFlag = foo
a następnie przeczytać bez problemu.