Frage:
Was ist der effizienteste Weg, um HTML-Elemente mit jQuery zu erstellen?
Antworten:
Da es ungefähr jQuerydann 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 handlersin 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 sizeAttribut kann jedoch nicht mit diesem Ansatz jQuery-1.8.0oder später festgelegt werden. Hier ist ein alter Fehlerbericht . Sehen Sie sich dieses Beispiel an , jQuery-1.7.2das zeigt, dass das sizeAttribut auf 30das obige Beispiel eingestellt ist, aber denselben Ansatz verwendet, mit dem wir das sizeAttribut jQuery-1.8.3hier nicht festlegen können ist eine nicht funktionierende Geige . Um das sizeAttribut 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/propals untergeordnetes Objekt übergeben, aber es funktioniert in jQuery-1.8.0 and laterVersionen. Ü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 jQueryFehlerbericht 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.