Frage:
Was ist der effizienteste Weg, um HTML-Elemente mit jQuery zu erstellen?
Antworten:
Da es ungefähr jQuery
dann ist, denke ich, ist es besser, diesen (sauberen) Ansatz zu verwenden (den Sie verwenden)
$('<div/>', {
'id':'myDiv',
'class':'myClass',
'text':'Text Only',
}).on('click', function(){
alert(this.id); // myDiv
}).appendTo('body');
DEMO.
Auf diese Weise können Sie sogar Ereignishandler für das jeweilige Element wie verwenden
$('<div/>', {
'id':'myDiv',
'class':'myClass',
'style':'cursor:pointer;font-weight:bold;',
'html':'<span>For HTML</span>',
'click':function(){ alert(this.id) },
'mouseenter':function(){ $(this).css('color', 'red'); },
'mouseleave':function(){ $(this).css('color', 'black'); }
}).appendTo('body');
DEMO.
Wenn Sie jedoch mit vielen dynamischen Elementen arbeiten, sollten Sie das Hinzufügen eines Ereignisses handlers
in einem bestimmten Element vermeiden. Stattdessen sollten Sie einen delegierten Ereignishandler wie verwenden
$(document).on('click', '.myClass', function(){
alert(this.innerHTML);
});
var i=1;
for(;i<=200;i++){
$('<div/>', {
'class':'myClass',
'html':'<span>Element'+i+'</span>'
}).appendTo('body');
}
DEMO.
Wenn Sie also Hunderte von Elementen mit derselben Klasse erstellen und anhängen, dh ( myClass
), wird weniger Speicher für die Ereignisbehandlung benötigt, da nur ein Handler für alle dynamisch eingefügten Elemente zur Verfügung steht.
Update: Da wir den folgenden Ansatz verwenden können, um ein dynamisches Element zu erstellen
$('<input/>', {
'type': 'Text',
'value':'Some Text',
'size': '30'
}).appendTo("body");
Das size
Attribut kann jedoch nicht mit diesem Ansatz jQuery-1.8.0
oder später festgelegt werden. Hier ist ein alter Fehlerbericht . Sehen Sie sich dieses Beispiel an , jQuery-1.7.2
das zeigt, dass das size
Attribut auf 30
das obige Beispiel eingestellt ist, aber denselben Ansatz verwendet, mit dem wir das size
Attribut jQuery-1.8.3
hier nicht festlegen können ist eine nicht funktionierende Geige . Um das size
Attribut festzulegen, können wir den folgenden Ansatz verwenden
$('<input/>', {
'type': 'Text',
'value':'Some Text',
attr: { size: "30" }
}).appendTo("body");
Oder dieses
$('<input/>', {
'type': 'Text',
'value':'Some Text',
prop: { size: "30" }
}).appendTo("body");
Wir können attr/prop
als untergeordnetes Objekt übergeben, aber es funktioniert in jQuery-1.8.0 and later
Versionen. Überprüfen Sie dieses Beispiel, aber es funktioniert nicht in jQuery-1.7.2 or earlier
(nicht in allen früheren Versionen getestet).
Übrigens, aus dem jQuery
Fehlerbericht entnommen
Es gibt verschiedene Lösungen. Das erste ist, es überhaupt nicht zu verwenden, da es Ihnen keinen Platz spart und dies die Klarheit des Codes verbessert:
Sie rieten zu folgendem Ansatz ( funktioniert auch in früheren , getestet in 1.6.4
)
$('<input/>')
.attr( { type:'text', size:50, autofocus:1 } )
.val("Some text").appendTo("body");
Es ist also besser, diesen Ansatz zu verwenden, IMO. Dieses Update wird , nachdem ich gelesen / gefunden diese Antwort und in dieser Antwort zeigt , dass , wenn Sie verwenden , 'Size'(capital S)
anstatt 'size'
es dann wird nur gut funktionieren , auch inversion-2.0.2
$('<input>', {
'type' : 'text',
'Size' : '50', // size won't work
'autofocus' : 'true'
}).appendTo('body');
Lesen Sie auch über Requisiten , da es einen Unterschied gibt Attributes vs. Properties
, der von Version zu Version unterschiedlich ist.