La forma preferida de crear un nuevo elemento con jQuery


227

Tengo 2 formas en que puedo crear un <div>uso jQuery.

Ya sea:

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

O:

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

¿Cuáles son los inconvenientes de usar una segunda vía que no sea la reutilización?


8
Es solo cuestión de reutilización. Tu llamada.
Roko C. Buljan

@gdoron por reutilización Quiero decir: si tiene un elemento dentro de una variable, puede volver a llamar a esa var donde lo necesite, como en su ejemplo.
Roko C. Buljan

2
¿Por qué .html, pero no .appenden el segundo caso?
Ingeniero

@ Ingeniero - Lo siento, eso fue un error aquí. Lo corregí.
Ashwin

Pensé que el último método era más rápido en términos de velocidad de ejecución, pero el primero parece (10% ~ 40%) más rápido: jsperf.com/jquery-append-string-vs-append-jquery-reference
Fabrizio Calderan

Respuestas:


339

La primera opción le brinda más flexibilidad:

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

Y, por supuesto, .html('*')anula el contenido mientras .append('*')que no, pero supongo que esta no era tu pregunta.

Otra buena práctica es prefijar sus variables jQuery con $:
¿Hay alguna razón específica para usar $ with variable en jQuery?

Colocar comillas alrededor del "class"nombre de la propiedad lo hará más compatible con navegadores menos flexibles.


10
También es una buena práctica comenzar los nombres de la colección jQuery con un " $", en mi opinión. Solo señalando que lo que has hecho no requiere $div:$("<div>", {id: 'foo', class: 'a', click: function () {}}).appendTo("#box");
Píldoras de explosión

¿Son necesarios esos signos de dólar o un error tipográfico? $div. No he visto esa sintaxis antes, pero soy nuevo en Jquery.
Felwithe

Siempre uso $ es la variable es un objeto jquery, $ _ si es una colección jQuery y _var si es un contador. La var para las variables regulares.
Casey

1
¿Dónde está la documentación para esta forma de crear elementos? $("<div>", {id: "foo", class: "a"});. Quiero saber si hay otras opciones para ello
Saba Ahang

@gdoron por favor, eche un vistazo a mi pregunta stackoverflow.com/questions/35413044/…
Vixed

74

Personalmente, creo que es más importante que el código sea legible y editable que performant. Cualquiera que le resulte más fácil de ver y debe ser el que elija para los factores anteriores. Puedes escribirlo como:

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

Y tu primer método como:

// 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);

Pero en lo que respecta a la legibilidad; El enfoque jQuery es mi favorito . Siga estos útiles trucos, notas y mejores prácticas de jQuery


Gracias por ese enlace a la referencia de jQuery sobre la creación de nuevos elementos HTML . Tan difícil de google para eso.
Bob Stein


25

Mucho más expresivo,

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

Referencia: documentos


44
classdebe estar entre comillas, de acuerdo con los documentos (a través del enlace de Documentos anterior): "El nombre" clase "debe estar entre comillas en el objeto ya que es una palabra reservada de JavaScript, y" className "no se puede usar ya que se refiere a la propiedad DOM , no el atributo ".
Isaac Gregson

5

Según la documentación oficial de jQuery

Para crear un elemento HTML, $("<div/>")o$("<div></div>") se prefiere.

A continuación, puede utilizar cualquiera de los dos appendTo, append, before,after y etc ,. para insertar el nuevo elemento al DOM.

PS: jQuery Versión 1.11.x


2

De acuerdo con la documentación de 3.4 , se prefiere utilizar atributos con attr()método.

$('<div></div>').attr(
  {
    id: 'some dynanmic|static id',
    "class": 'some dynanmic|static class'
  }
).click(function() {
  $( "span", this ).addClass( "bar" ); // example from the docs
});

Agregué citas. Si no pone classcomillas, esto fallará silenciosamente y puede resultar en locura.
John Henckel

0

Recomendaría la primera opción, donde realmente construyes elementos usando jQuery. El segundo enfoque simplemente establece la propiedad innerHTML del elemento en una cadena, que resulta ser HTML, y es más propensa a errores y menos flexible.


1
@Ash con el segundo enfoque, puede eliminar por error a todos los demás elementos
secundarios

0

Si #boxestá vacío, nada, pero si no es así, hacen cosas muy diferentes. El primero agregará a divcomo el último nodo hijo de #box. Este último reemplaza completamente el contenido de #boxun solo vacío div, texto y todo.


Oh ... no quiero usar agregar aquí;)
Ashwin

0

También es posible crear un elemento div de la siguiente manera:

var my_div = document.createElement('div');

agregar clase

my_div.classList.add('col-10');

también puede realizar append()yappendChild()

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.