11496 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
juste une petite question rapidos

Quand on fait un truc du genre
$("#id").append($("<div class='className'>content</div>"));


En interne, jQuery utilise t-il l'innerHTML ou les méthodes DOM (createElement("div") & cie) pour procéder à l'appendChild sur le node "#id" ?

Je saurais ou chercher mais je n'ai vraiment pas le temps
Si une âme charitable connait la réponse...

Merci!
docs.jquery.com a écrit :
Simple elements without attributes, e.g., "<div />", are created via document.createElement. All other cases are parsed by assigning the string to the .innerHTML property of a div element.
Si j'avais du chercher j'aurais surement regardé la fonction fn.init ^^
Dans la doc? Cool

Et puis bon après coup me suis dit que comme jQuery prône la rapidité, scaner la chaine pour utiliser du DOM... Bof. Le parser interne fait très bien le boulot

Bref, merci!
Pas de quoi! Smiley cligne En fait en pratique, si on crée un élément de cette manière:
$("<p id='foo'>Bar</p>")
jQuery va créer un div (via document.createElement) dans lequel il injectera l'élément voulu (le paragraphe en l'occurence) par innerHTML. Ce div ne sert que de récepteur temporaire à l'injection par innerHTML de la chaîne passée. Bref, c'est moche, et on utilisera plutôt l'une de ces syntaxes:
$("<div />").attr("id","foo").text("Bar")
$(document.createElement("div")).attr("id","foo").text("Bar")
Yep je connais bien cette technique puisqu'il fut un temps où je l'utilisais moi-même (des fois, c'est tout simplement ch*** de setter et resetter des attributs, surtout avec IE et son name, class etc)

Là je voulais simplement savoir si la démarche de ce framework était bien la plus rapide. Et effectivement, combinée au code que tu donnes, c'est bien probable.

Après je me demande... jQuery et sa fonction load (ajax)...

// Create a dummy div to hold the results
jQuery("<div/>")
    // inject the contents of the document in, removing the scripts
    // to avoid any 'Permission Denied' errors in IE
    .append(res.responseText.replace(/<script(.|\s)*?\/script>/g, ""))

Pour peu que le doc web loadé fasse 20ko...
Bim!

Voilà voilà