2009-03-28 6 views
0

Je crée cette fonction JS qui crée un élément La fonction prend deux paramètres strName et objAttributesJavaScript setAttribute alternatif

function createElement(strName, objAttributes) 
{ 
    var elem = document.createElement(strName); 

    for (var i in objAttributes) 
    elem.setAttribute(i, objAttributes[i]); 

    return elem; 
} 

Cela fonctionne bien dans Fx, mais pas dans MSIE Je sais que la méthode setAttibute est buggy et la solution de contournement proposée est

elem.attr = 'val'; 

Mais maintenant je ne sais pas comment écrire ce dans ma boucle.

J'ai essayé à la fois elem.style et elem ['style'] mais aucun d'entre eux ne fonctionne.

Quelqu'un peut-il me donner quelques conseils,

merci à l'avance

t

Répondre

5

Utilisez elem[i].

function createElement(strName, objAttributes) 
{ 
    var elem = document.createElement(strName); 

    for (var i in objAttributes) 
     elem[i] = objAttributes[i]; 

    return elem; 
} 
+0

oui vous avez raison. Merci! Maintenant, je dois juste traiter certains attributs html comme le style. –

0

Vous ne pouvez pas simplement échanger les propriétés de définition et setAttribute.

Vous devez faire attention à la définition de propriétés sur un élément à la place de l'utilisation de setAttribute. Les propriétés de style et les gestionnaires d'événements doivent être soigneusement écrits, et les attributs qui étaient auparavant minimisés en html (disabled, multiple, readonly) ont des valeurs valides spécifiques au navigateur. De plus, si vous définissez element.class = "mynewclass", vous obtenez une erreur, car class est un mot javascript réservé, bien qu'il soit parfaitement sûr de l'utiliser comme chaîne dans une affectation setAttribute. Le nom de la propriété est '.className', et le nom propre de l'attribut 'for' d'un label est 'htmlFor'.

1

Laissez jQuery gérer le non-sens cross-browser ...

$(elem).attr(i, objAttributes[i]); 
Questions connexes