Forma correcta de usar appendTo en jquery

2 minutos de lectura

avatar de usuario
usuario1763812

¿Estoy usando el método jquery appendTo correctamente en el siguiente código?

Lo pregunto porque parece que se muestra correctamente cuando lo pruebo en jsfiddle pero cuando uso el mismo código en mi servidor local (en FF, IE y Chrome) se muestra con cuadros alargados:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Estoy asumiendo que estoy haciendo algo mal. Gracias.

HTML

<div class="ws-css-table"  >
  <div class="ws-css-table-tr">
        <div class="ws-css-table-td"></div>
        <div class="ws-css-table-td"></div>
    </div>
    <div class="ws-css-table-tr">
        <div class="ws-css-table-td"></div>
        <div class="ws-css-table-td"></div>
    </div>
    <div class="ws-css-table-tr">
        <div class="ws-css-table-td"></div>
        <div class="ws-css-table-td"></div>
    </div>    
</div>   

<br/>
<button id="css-icol">Col +</button><br/><br/>

jquery

$('#css-icol').click(function(){
    $(".ws-css-table-td:last").clone().appendTo('.ws-css-table-tr');

  var tblArr = $('.ws-css-table > .ws-css-table-tr').map(function ()
   {
    return $(this).children().map(function ()
    {
        return $(this);
    });
});     

lastCol = $('.ws-css-table-tr:first > .ws-css-table-td').length;
 for (r=0; r<$('.ws-css-table-tr').length; r++)
    tblArr[r][lastCol-1].text('X');
 });    

CSS

.ws-css-table {
    display: table;
}
.ws-css-table-tr { 
    display: table-row;     
}
.ws-css-table-td { 
    display: table-cell;
    border:1px solid #000;
    width: 15px;
    height:15px;
    text-align:center;
  vertical-align:middle;
}

  • El código se ve bien, parece que puede verse afectado por elementos CSS que no se muestran en el ejemplo.

    – Sean Phillips

    19/10/2015 a las 11:38

  • Gracias por la respuesta. No tengo ningún otro elemento CSS que yo sepa. ¿Hay una manera de comprobar?

    – usuario1763812

    19/10/2015 a las 11:47

  • Además, cuando agrego más columnas a la “cuadrícula”, aparecen ‘X’ dentro de los cuadros.

    – usuario1763812

    19 de octubre de 2015 a las 12:18

  • ¿Trabajando bien? jsfiddle.net/110ewzuk

    – Joaquín M.

    19 de octubre de 2015 a las 12:22


  • Use las herramientas Firebug o Chrome Developer para verificar el tipo de documento que está procesando (especialmente importante para IE) y qué css se está utilizando para procesar (Firebug/HTML/Computed) o (Firebug/HTML/Layout).

    – Ewen

    19/10/2015 a las 14:02

avatar de usuario
Pavel Gatnar

Tienes un error en esta línea:

$(".ws-css-table-td:last").clone().appendTo('.ws-css-table-tr');

Selecciona la última celda de la tabla y la clona en cada fila. Cuando desee copiar la columna, debe seleccionar las últimas celdas en todas las filas, luego debe iterar sobre las celdas clonadas. Finalmente, el método after aquí es más elegante…

$(".ws-css-table-td:last-child")
  .each(function(){
    var $this=$(this)
    $this.after($this.clone())
  })

Para crear una columna vacía use:

$(".ws-css-table-td:last-child")
  .after("<div class="ws-css-table-td"/>")

  • Selector elegante, por cierto.

    – nórdico

    20/10/2015 a las 18:21

  • @nrodic gracias, jquery está aquí para hacer que el código sea elegante

    – Pavel Gatnar

    20 oct 2015 a las 18:39

¿Ha sido útil esta solución?