objet.nom de la classe ou de l'objet.getAttribute(“nom de la classe/class”)?
Entre ces deux :
Javascript
function setCss(object, css) {
return (object.className = css);
}
function getCss(object, css) {
return object.className;
}
Ou
function getCss2(object)
{
if (object.getAttribute("className")) {
return object.getAttribute("className");
}
return object.getAttribute("class");
}
function setCss2(object, cssclass)
{
if (object.getAttribute("className")) {
return object.setAttribute("className",cssclass);
}
object.setAttribute("class",cssclass);
}
HTML
<a href="#" onClick="setCss(this, 'newclass')" />
<a href="#" class="something" onClick="alert(getCss(this))" />
<a href="#" onClick="setCss2(this, 'newclass')" />
<a href="#" class="something" onClick="alert(getCss2(this))" />
La version semble fonctionner dans IE8, FF4, Chrome, Opera et Safari. (jsFiddle (amélioré) démo)
Qui est le meilleur-utilisation pratique et pourquoi? Avez-vous jamais rencontré de problème avec la version?
OriginalL'auteur Kraz | 2011-07-04
Vous devez vous connecter pour publier un commentaire.
getAttribute("class")
est plus universel, car il peut être utilisé dans différents types de documents. Dans des documents XML, le plus important. Dont le format SVG.element.className
fonctionne uniquement en HTML. Elle est décrite dans le DOM niveau 2 HTML specs.OriginalL'auteur katspaugh
object.getAttribute("className");
en fait ne fonctionne pas.La différence est que
getAttribute
obtient la valeur d'une attribut HTML comme il est écrit dans le code HTML (avec quelques exceptions).Ces valeurs sont pour la plupart également les valeurs initiales de l' propriétés de l'élément DOM. Mais leur accès peut donner des valeurs différentes, en raison de la pré-/post-traitement.
Par exemple, si vous avez un
<a>
élément,el.href
vous donne l' (absolue) de l'URL, alors queel.getAttribute('href')
vous donne l'URL comme il a été écrit dans le code HTML.La plupart du temps, vous voulez accéder aux propriétés de l'élément DOM, que ceux-ci reflètent l'état actuel de l'élément.
object.getAttribute("className");
est nécessaire pour IE 7 et de moins en moins en fait. Vous pouvez facilement deviner pourquoi... :/Je vois... alors disons que dans bon implémentations, cela ne fonctionne pas 😉
OriginalL'auteur Felix Kling
D'utiliser la première.
C'est trieur. Il fonctionne dans tous les navigateurs, même les plus anciens, ceux qui ne supportent pas getAttribute. Il est probablement plus rapide.
Mais s'il vous plaît ne pas utiliser une fonction pour cela. Il suffit d'utiliser cette.un nom de classe et ce.className='newClass'. À l'aide d'une fonction est trop pour cela.
OriginalL'auteur Gerben