2012-05-25 15 views
14

Im tratando de agregar un bloque grande de texto usando append() de jquery.Agregar un bloque grande de html con append()

$('#add_contact_btn').click(function(event) { 
    event.preventDefault(); 

    var large = '<div class="accordian_container"><a href="#" class="accordian_trigger"><h4>Co-Borrower Information</h4></a><hr/><div class="accordian_item" id="accord_item_2"><label> First Name</label><br/><input type="text"/><br/><label>Middle Name</label><br/> 
      <input type="text"/><br/> 
      <label>Last Name</label><br/> 
      <input type="text" /><br/> 
      <label>Home Number</label><br/> 
      <input type="text"/><br> 
      <label>Work Number</label><br/> 
      <input type="text"/><br> 
      <label>Cell Number</label><br/> 
      <input type="text"/><br> 
      </div> 
      </div>'; 

    $('#accordion_container').append(large); 



}); 

No parece estar trabajando y después de ver la documentación de append(), no puedo entender por qué - cualquier idea? ¿Es la gran cantidad de HTML que estoy tratando de agregar?

+1

¿Tiene un elemento con id "accordian_container"? – nunespascal

+0

¿Hay algún mensaje de error específico en la consola? – David

Respuesta

19

Elimina los saltos de línea.

http://jsfiddle.net/DmERt/

var large = '<div class="accordian_container"><a href="#" class="accordian_trigger"><h4>Co-Borrower Information</h4></a><hr/><div class="accordian_item" id="accord_item_2"><label> First Name</label><br/><input type="text"/><br/><label>Middle Name</label><br/><input type="text"/><br/><label>Last Name</label><br/><input type="text" /><br/><label>Home Number</label><br/><input type="text"/><br><label>Work Number</label><br/><input type="text"/><br><label>Cell Number</label><br/><input type="text"/><br></div></div>'; 

$('#accordion_container').append(large);​ 
+1

'$ ('# accordion_container'). Append (large);' así es como lo publicó. (Siempre que tenga un elemento con ID 'accordion_container') –

+0

Esto lo agregaría a todos los elementos div. No es algo que normalmente querrías. – nunespascal

+1

Fue una muestra extraída de mi ejemplo de violín. La pregunta se lo agrega a una identificación. Supuse que la persona que pregunta tendría suficiente sentido común para agregarla donde desea agregarla. Actualizando –

8

Es mi entendimiento de que si usted quiere poner su cadena larga en varias líneas que es más eficaz utilizar una matriz de cadenas y unirse a ellos.

var bigString = [ 
    'some long text here', 
    'more long text here', 
    '...' 
]; 
$('#accordion_container').append(bigString.join('')); 
20

Javascript no tiene líneas múltiples en la forma que está escribiendo, no se puede simplemente abrir una cadena en una línea, bajar unas cuantas líneas y luego cerrarla. (Hay algunas formas de hacer cadenas de varias líneas en JS, pero son un poco al revés).

Como la mayoría de la gente lo hace es algo como esto:

var myString = '<p>Line One</p>' + 
'<p>Line Two</p>' + 
'<p>Line Three</p>'; 

Nota que la respuesta anterior es viejo y ya no es totalmente cierto. Como ES6 se vuelve más común, ya medida que más y más personas transpile de ES6, somos más y más capaces de utilizar literales de plantilla, que pueden ser utilizados como líneas múltiples:

var myString = `<p>Line One</p> 
<p>Line Two</p> 
<p>Line Three</p>`; 
+0

Si el texto tiene una comilla simple (') ex 'Mr./Ms ', la creación de grunt fallará, por favor use la respuesta a continuación. Funcionó para mí –

12

debe crear una plantilla en HTML que está oculto, luego agrega su contenido HTML. Por ejemplo:

<div class="hide" id="template"> 
    <b>Some HTML</b> 
</div> 

jQuery:

$("#container").append($("#template").html()); 

Poner HTML en una cadena JavaScript es más difícil de leer y buscar, es propenso a errores y su IDE tendrá que luchar para formatear correctamente.

+0

¿Puedo insertar la misma plantilla varias veces? –

+0

@FranciscoCorralesMorales sí - antes de todos los que quieras – rybo111

+0

definitivamente el enfoque correcto, he agregado un pequeño ejemplo de plantilla html para aclarar tu respuesta –

0

También puede clonar el div con jQuery y luego agregar el clon, de manera menos desordenada.

var accordionClone = $('.accordion_container').clone(); 
$('#accordion_container').append(accordionClone); 
0

Si saltos de línea son un problema sólo tiene que utilizar innerHTML, que funciona en todos los navegadores, ya IE5:

$('#accordion_container')[0].innerHTML += large;​ 

O, para las colecciones:

$('.accordion_container').forEach(function() { 
    this.innerHTML += large;​ 
}); 
7

Se puede utilizar una barra invertida al el final de cada línea

http://davidwalsh.name/multiline-javascript-strings

var multiStr = "This is the first line \ 
This is the second line \ 
This is more..."; 
+0

Uso lo que Oliver dijo todo el tiempo en JS porque parece más humano legible. Y no tiene que seguir definiendo Cotizaciones en cada línea y concatenando: Aquí está mi http://jsfiddle.net/49gpqwua/ (JSFiddle) – Preactive

3

Otra alternativa es literales plantilla con back-garrapatas:

var large = `some long text here 
some long text here 
some long text here`; 

Es bastante una nueva sintaxis y no soportado en el IE sin embargo.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

+0

Tenga en cuenta que el nombre ha sido cambiado a ** literales de plantilla **, y que en ese ejemplo, los espacios para sangrar las segundas dos líneas serían una parte de la cadena final. Sigue siendo una respuesta válida, solo vale la pena notar esas dos cosas. –

+0

Gracias por señalar esto, @JimboJonny – gustavwiz

+0

Esto es oro, muchas gracias. –

Cuestiones relacionadas