Festlegen einer Eigenschaft über die Eigenschaft oder setAttribute

8

Ist einer dieser mehr vorzuziehen als der andere? Warum? Was ist mit Leistung - wenn diese tausende Male aufgerufen werden?

%Vor%

Beide scheinen ein Eingabeelement [Text] in FF 4 zu deaktivieren.

    
user979672 05.11.2011, 07:30
quelle

4 Antworten

4

Im Allgemeinen ...

Verwenden Sie Eigenschaften. Lange Zeit (bis zur Version 7 oder 8 IIRC) hatte Internet Explorer eine schwer beschädigte Implementierung von setAttribute , die die Eigenschaft nicht als Attribut festlegen würde (der klassische Fehlerpunkt war class , da keine class -Eigenschaft vorhanden ist. es ist className ).

In diesem Fall ist insbesondere ... element.setAttribute("disabled", true); falsch. Es sollte element.setAttribute("disabled", "disabled");

sein     
Quentin 05.11.2011, 07:46
quelle
2

element.setAttribute("disabled", some_bool) funktioniert nicht so, wie Sie denken. Insbesondere, standardmäßig, ist disabled ein sogenanntes boolesches Attribut ; seine Anwesenheit, ungeachtet ihres Wertes, macht es wahr. disabled="" , disabled="disabled" , disabled="true" und sogar disabled="false" (!!!) bedeuten in den meisten Browsern dasselbe. (Obwohl die letzten beiden tatsächlich ungültiges HTML sind, werden die meisten Browser sie aus Echtheitsgründen als äquivalent zu disabled="disabled" betrachten. Einschließlich jeder der großen Vier.) Sie setzen ein boolesches Attribut auf true, indem Sie einen Wert setzen - einen beliebigen Wert, even Wenn es falsch ist - und Sie setzen es auf false, indem Sie das Attribut vollständig entfernen.

Wenn Ihnen der tatsächliche Zeichenfolgenwert des Attributs wichtig ist (was in diesem Fall nicht der Fall sein sollte) und insbesondere, wenn das Attribut nicht bereits über das DOM verfügbar ist (dh es hat keine entsprechende Eigenschaft) ), dann (get/set)Attribute verwenden. In den meisten Fällen (vor allem wenn Sie sich darum kümmern, wie das Element beeinflusst wird, wie in diesem Fall, wenn Sie versuchen, ein Element zu deaktivieren), verwenden Sie die DOM-Eigenschaft.

    
cHao 05.11.2011 13:38
quelle
0

IE benötigt einige Attribute, die mit setAttribute gesetzt werden, aber nicht alle. Ich habe jedoch keine Liste, Sie müssen nur überprüfen, ob es funktioniert oder nicht. Wenn Sie setAttribute verwenden, wird das Attribut ebenfalls in das DOM eingefügt, sodass es beim Ausführen von view source angezeigt werden kann.

    
Some programmer dude 05.11.2011 07:37
quelle
0

Nur ein Tipp: element.setAttribute ('class', xxx) funktioniert in einigen IE-Versionen nicht.

Bevorzugt stattdessen element.className = xxx

    
Ricardo Bin 05.11.2011 14:14
quelle

Tags und Links