Jquery inserisce una nuova riga nella tabella in un determinato indice


Risposte:


158

Puoi usare .eq()e .after()come questo:

$('#my_table > tbody > tr').eq(i-1).after(html);

Gli indici sono basati su 0, quindi per essere la quarta riga, è necessario i-1, poiché .eq(3)sarebbe la quarta riga, è necessario tornare alla terza riga ( 2) e inserirla .after().


8
Va notato che se alla funzione eq di jQuery viene assegnato un valore negativo, verrà eseguito il ciclo fino alla fine della tabella. Quindi, eseguendolo e provando a inserirlo sull'indice 0, la nuova riga verrà inserita alla fine
rossisdead

2
E aggiungi .before(html)se vuoi inserirlo prima di quell'indice
Abhi

1
questo fallisce, se non ci sono righe nella tabella, qualcuno ha una soluzione (basata su indice) che funziona anche per la prima riga?
MartinM

@MartinM se stai inserendo anche se non ci sono righe , allora è uno scenario completamente diverso (dove l'indice non ha importanza?) - Vuoi aggiungere alla fine, non importa cosa?
Nick Craver

@ NickCraver, no, sto solo cercando una soluzione generale basata sull'indice (come questa), ma la mia tabella è vuota all'inizio .. Posso, ovviamente controllare, se la tabella è vuota e inserire la prima riga e poi continuare con il tuo metodo, ma questo non mi sembra affatto ovvio ..
MartinM

17

Prova questo:

var i = 3;

$('#my_table > tbody > tr:eq(' + i + ')').after(html);

o questo:

var i = 3;

$('#my_table > tbody > tr').eq( i ).after(html);

o questo:

var i = 4;

$('#my_table > tbody > tr:nth-child(' + i + ')').after(html);

Tutti questi posizioneranno la riga nella stessa posizione. nth-childutilizza un indice basato su 1.


4

Nota:

$('#my_table > tbody:last').append(newRow); // this will add new row inside tbody

$("table#myTable tr").last().after(newRow);  // this will add new row outside tbody 
                                             //i.e. between thead and tbody
                                             //.before() will also work similar

4

So che arriverà tardi, ma per quelle persone che vogliono implementarlo utilizzando esclusivamente il JavaScript, ecco come puoi farlo:

  1. Ottieni il riferimento alla corrente su trcui si fa clic.
  2. Crea un nuovo trelemento DOM.
  3. Aggiungilo al trnodo padre indicato .

HTML:

<table>
     <tr>
                    <td>
                        <button id="0" onclick="addRow()">Expand</button>
                    </td>
                    <td>abc</td>
                    <td>abc</td>
                    <td>abc</td>
                    <td>abc</td>
     </tr>

     <tr>
                    <td>
                        <button id="1" onclick="addRow()">Expand</button>
                    </td>
                    <td>abc</td>
                    <td>abc</td>
                    <td>abc</td>
                    <td>abc</td>
     </tr>
     <tr>
                    <td>
                        <button id="2" onclick="addRow()">Expand</button>
                    </td>
                    <td>abc</td>
                    <td>abc</td>
                    <td>abc</td>
                    <td>abc</td>
     </tr>

In JavaScript:

function addRow() {
        var evt = event.srcElement.id;
        var btn_clicked = document.getElementById(evt);
        var tr_referred = btn_clicked.parentNode.parentNode;
        var td = document.createElement('td');
        td.innerHTML = 'abc';
        var tr = document.createElement('tr');
        tr.appendChild(td);
        tr_referred.parentNode.insertBefore(tr, tr_referred.nextSibling);
        return tr;
    }

Ciò aggiungerà la nuova riga della tabella esattamente sotto la riga su cui si fa clic sul pulsante.




1
$('#my_table tbody tr:nth-child(' + i + ')').after(html);

0

Aggiungendo alla risposta di Nick Craver e considerando anche il punto sollevato da rossisdead, se lo scenario esiste come si deve aggiungere a una tabella vuota, o prima di una certa riga, ho fatto così:

var arr = []; //array
if (your condition) {
  arr.push(row.id); //push row's id for eg: to the array
  idx = arr.sort().indexOf(row.id);

  if (idx === 0) {   
    if (arr.length === 1) {  //if array size is only 1 (currently pushed item)
        $("#tableID").append(row);
    }
    else {       //if array size more than 1, but index still 0, meaning inserted row must be the first row
       $("#tableID tr").eq(idx + 1).before(row);
    }   
  }          
  else {     //if index is greater than 0, meaning inserted row to be after specified index row
      $("#tableID tr").eq(idx).after(row);
  }    
}

Spero che aiuti qualcuno.


-1
$($('#my_table > tbody:last')[index]).append(html);

4
Ciò comporterebbe sempre un'eccezione di indice fuori intervallo.
Nick Craver
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.