248 votes

La méthode préférée pour créer un nouvel élément avec jQuery

J'ai 2 façons de créer une <div> en utilisant jQuery .

Soit :

var div = $("<div></div>");
$("#box").append(div);

Ou :

$("#box").append("<div></div>");

Quels sont les inconvénients de l'utilisation de la deuxième voie autres que la réutilisabilité ?

9 votes

C'est juste une question de réutilisation. A vous de voir.

0 votes

@gdoron par réutilisabilité je veux dire : si vous avez un élément à l'intérieur d'une variable, alors vous pouvez rappeler cette var où vous voulez, comme dans votre exemple.

2 votes

Pourquoi .html mais pas .append dans le 2e cas ?

368voto

gdoron Points 61066

La première option vous donne plus de flexibilité :

var $div = $("<div>", {id: "foo", "class": "a"});
$div.click(function(){ /* ... */ });
$("#box").append($div);

Et bien sûr .html('*') remplace le contenu tandis que .append('*') ne le fait pas, mais je suppose que ce n'était pas votre question.

Une autre bonne pratique consiste à préfixer vos variables jQuery avec $ :
Y at-il une raison spécifique derrière l'utilisation de $ avec variable dans jQuery

En plaçant des guillemets autour de la "class" le nom de la propriété la rendra plus compatible avec les navigateurs moins souples.

10 votes

Une bonne pratique consiste également à commencer les noms de collections jQuery par un " $ ", à mon avis. Je note simplement que ce que vous avez fait ne nécessite pas $div : $("<div>", {id: 'foo', class: 'a', click: function () {}}).appendTo("#box");

0 votes

Ces signes de dollars sont-ils nécessaires ou s'agit-il d'une faute de frappe ? $div . Je n'ai jamais vu cette syntaxe auparavant, mais je suis novice en matière de Jquery.

0 votes

J'utilise toujours le $ si la variable est un objet jQuery, $_ si c'est une collection jQuery, et _var si c'est un compteur. Le var pour les variables ordinaires.

81voto

Niranjan Kala Points 9739

Je pense personnellement qu'il est plus important que le code soit lisible et modifiable que performant. Celui que vous trouvez le plus facile à regarder devrait être celui que vous choisissez pour les facteurs ci-dessus. Vous pouvez l'écrire comme suit :

$('#box').append(
  $('<div/>')
    .attr("id", "newDiv1")
    .addClass("newDiv purple bloated")
    .append("<span/>")
      .text("hello world")
);

Et votre première Méthode comme :

// create an element with an object literal, defining properties
var $e = $("<div>", {id: "newDiv1", name: 'test', class: "aClass"});
$e.click(function(){ /* ... */ });
// add the element to the body
$("#box").append($e);

Mais pour ce qui est de la lisibilité ; l'approche jQuery est ma préférée . Suivez cette Astuces, notes et meilleures pratiques concernant jQuery

0 votes

Merci pour ce lien vers le Référence jQuery sur la création de nouveaux éléments HTML . C'est si difficile de chercher sur Google.

0 votes

Il vaut mieux le faire comme ça : stackoverflow.com/a/43719563/383904

27voto

Darshan Points 106

C'est beaucoup plus expressif,

jQuery('<div/>', {
    "id": 'foo',
    "name": 'mainDiv',
    "class": 'wrapper',
    "click": function() {
      jQuery(this).toggleClass("test");
    }}).appendTo('selector');

Référence : Docs

5 votes

class doit être entre guillemets, selon les docs (via le lien Docs ci-dessus) : "Le nom "class" doit être cité dans l'objet car c'est un mot réservé de JavaScript, et "className" ne peut pas être utilisé car il fait référence à la propriété DOM, et non à l'attribut."

0voto

Explosion Pills Points 89756

Si #box est vide, rien, mais s'il ne l'est pas, ils font des choses très différentes. La première ajoutera un div comme le dernier nœud enfant de #box . Ce dernier remplace complètement le contenu de #box avec un seul vide div le texte et tout.

0 votes

Oh je ne voulais pas utiliser append ici ;)

0voto

jbabey Points 20696

Je recommande la première option, qui consiste à construire des éléments à l'aide de jQuery. La seconde approche consiste simplement à définir la propriété innerHTML de l'élément sur une chaîne, qui se trouve être du HTML, et elle est plus sujette aux erreurs et moins flexible.

1 votes

Avec la deuxième approche, vous risquez d'effacer par erreur tous les autres enfants du conteneur que vous modifiez : jsfiddle.net/jbabey/RBXq5/1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X