2010-02-04 28 views
38

Así que he visto tres maneras de agregar elementos html/DOM a una página. Tengo curiosidad por saber cuáles son los pros y los contras para cada uno de ellos.La mejor manera de agregar elementos DOM con jQuery

1 - Tradicional JavaScript

Creo que la manera JS recta de hacerlo es mediante la construcción de cada elemento, el establecimiento de atributos, y luego añadiendo ellos. Ejemplo:

var myRow = document.createElement("tr"); 
myRow.class = "myClass"; 

var firstTD = document.createElement("td"); 
firstTD.innerHTML = "first"; 
myRow.appendChild(firstTD); 

var secondTD = document.createElement("td"); 
secondTD.innerHTML = "second"; 
myRow.appendChild(secondTD); 

document.getElementById("myContainer").appendChild(myRow); 

2 - Al añadir una cadena de HTML a través de jQuery

me he dado cuenta de que la mayoría de los ejemplos de jQuery que veo por lo general sólo añadir una cadena de HTML.
Ejemplo:

$("#myContainer").append('<tr class="myClass"><td>first</td><td>second</td></tr>'); 

3 - .clone de jQuery()

También he visto una gran cantidad de usos y referencias a .clone() en jQuery.
Ejemplo:

$("#myContainer").append($(".myClass").Clone()); 

me encantaría escuchar lo que otros tienen que decir acerca de esto.

(Además, esto parece ser un buen candidato para una 'comunidad wiki', pero no estoy muy familiarizado con ellos. Alguien comentario y quiero saber si debe ser? Gracias)

+0

Es 'innerHTML' en lugar de' innerHtml'. –

+0

Hecho la actualización – sdr

+6

Sólo dos años después :) –

Respuesta

60

Si está utilizando jQuery 1.4 La mejor manera es la siguiente:

$("<a/>", { 
    id: 'example-link', 
    href: 'http://www.example.com/', 
    text: 'Example Page' 
}).appendTo("body"); 
+1

@sp, ¿cómo se encadenaría esto para lograr el ejemplo ? (Sin criticar, simplemente no sé cómo funciona esto para los elementos anidados.) – user113716

+3

http://pastie.org/812613 Esto crearía el tr, agregará los tds y lo agregará al contenedor –

+0

¿Cómo funciona ese código? crea el tr, agrega los tds y añádelo al contenedor? ¡Parece que estás simplemente agregando un enlace al elemento del cuerpo! – richard

-2

La manera más limpia de hacerlo es usando jQuery.

$('tr').addClass('myClass') como sintaxis. Esto es fácil de leer, comprender y mantener.

+0

Esto no está relacionado con la publicación en absoluto. – RyanDawkins

0

Si ya tiene jQuery disponible, úselo. Si no desea alojarlo, use la versión alojada de Google. Al final siempre llama a los métodos javascript createElement o innerHTML nativos de todos modos. Entonces usaría el n. ° 2 y el n. ° 3 si tuviera que clonar específicamente un elemento existente en la página.

4

Si ya tiene un elemento de plantilla que desea copiar a continuación, por todos los medios utilizar clone().

Pero si desea crear un elemento de cero entonces hay básicamente dos métodos que creo que aludía a:

  1. Crear elementos DOM como objetos (usando createElement por ejemplo).
  2. Crear elementos DOM como HTML (utilizando innerHTML o jQuery's html() por ejemplo).

Primero, si cualquiera de los métodos es más intuitivo o más fácil de escribir para usted, le recomiendo que lo haga.

De lo contrario beneficios del uso de este último es que es más limpia si el elemento tiene muchos niños.Por ejemplo, intente hacer una fila de la tabla con 6 columnas, cada una con una clase diferente usando el primer método. Su código será mucho más largo que si utilizó el segundo método.

En cuanto al rendimiento, esta es una buena guía http://andrew.hedges.name/experiments/innerhtml/ pero la respuesta corta es que para la mayoría de los casos las diferencias son bastante insignificantes. Una buena guía para el rendimiento en general también es: http://www.artzstudio.com/2009/04/jquery-performance-rules/. El sexto consejo tiene que ver con la manipulación DOM.

0

Si está trabajando con grandes cantidades de HTML que desea volver a utilizar, le sugiero que mire: http://api.jquery.com/jQuery.template/ que es definitivo, pero será reemplazado por algo mejor.

Lo uso en un entorno de producción y es genial, como para piezas más pequeñas de html qué sp. Said es la mejor manera

+1

Eso es un 404; ¿te refieres a http://codepb.github.io/jquery-template/ o algo más? –

+0

Este es un complemento descontinuado, aunque originalmente oficial, ahora hay mejores soluciones, como mustache.js, etc ... –

0

Clon contenido existente ...

var $html = $template.clone();
 $html.find(''); ///after change content...

Debido contenido clon es con propiedades 'DOM'. A continuación, puede cambiar estas etiquetas, propiedades, valor y añádalo ...

Cuestiones relacionadas