2011-02-11 21 views
16

Tengo un pequeño problema. Tengo algunas tablas creadas dinámicamente y cada fila tiene una identificación. Quiero eliminar la fila con el id "x".Eliminar una fila de una tabla por id

Probé el método habitual (removeChild) pero aparentemente no funciona para las tablas.

function deleteRow(tableid, rowid) 
{ 
     document.getElementById(tableid).removeChild(document.getElementById(rowid)); 
} 

El error que consigo es: Nodo no se encontró "código:" 8

También probamos este:

function deleteRow(tbodyid, rowid) 
{ 
     document.getElementById(tbodyid).removeChild(document.getElementById(rowid)); 
} 

y tiene el mismo error.

No puedo usar el método deleteRow() porque ese necesita el índice de la fila y prefiero no buscar la marca de identificación que el índice luego eliminar (aunque si no encuentro otras soluciones ...) .

+0

Puede obtener el índice de fila por 'rowElement.rowIndex' ... –

+0

Podría agregar una tabla de ejemplo para probar con, Podría ser algo extraño en la forma en que se diseñó la tabla. –

Respuesta

55

¿Qué tal:

function deleteRow(rowid) 
{ 
    var row = document.getElementById(rowid); 
    row.parentNode.removeChild(row); 
} 

Y, si eso no funciona, esto realmente debería funcionar:

function deleteRow(rowid) 
{ 
    var row = document.getElementById(rowid); 
    var table = row.parentNode; 
    while (table && table.tagName != 'TABLE') 
     table = table.parentNode; 
    if (!table) 
     return; 
    table.deleteRow(row.rowIndex); 
} 
+0

Muchas gracias. Realmente funciona bien – Kailas

+0

Su primera elección fue excelente para mí.Había engañado con rowIndex sin éxito, pero es bueno ver este ejemplo. –

1

¿Y qué hay de intentar no borrar pero ocultar esa fila?

+0

bueno ... excepto el hecho de que hay alrededor de 80000 y funcionaría bastante mal ... Verifico su existencia y luego obtengo datos si existe (podría verificar la visualización: ninguno también pero creo que es más rápido check undefined). – zozo

0

El padre de la fila no es el objeto que se cree, esto es lo que entiendo de el error.
Primero intenta detectar el padre de la fila, entonces puedes estar seguro de qué escribir en getElementById parte del padre.

2

De esta post, probar este javascript:

function removeRow(id) { 
    var tr = document.getElementById(id); 
    if (tr) { 
    if (tr.nodeName == 'TR') { 
     var tbl = tr; // Look up the hierarchy for TABLE 
     while (tbl != document && tbl.nodeName != 'TABLE') { 
     tbl = tbl.parentNode; 
     } 

     if (tbl && tbl.nodeName == 'TABLE') { 
     while (tr.hasChildNodes()) { 
      tr.removeChild(tr.lastChild); 
     } 
     tr.parentNode.removeChild(tr); 
     } 
    } else { 
     alert('Specified document element is not a TR. id=' + id); 
    } 
    } else { 
    alert('Specified document element is not found. id=' + id); 
    } 
} 

yo probamos este Javascript en una página de prueba y funcionó para mí en Firefox.

3

a Vilx-:

var table = row.parentNode; 
while (table && table.tagName != 'TABLE') 
    table = table.parentNode; 

y lo que si es row.parentNodeTBODY?

Usted debe comprobar que funciona en primer lugar, y después de eso hacer while por .tBodies, probablemente

0

algo rápido y sucio:

<script type='text/javascript'> 
function del_tr(remtr) 
{ 
    while((remtr.nodeName.toLowerCase())!='tr') 
     remtr = remtr.parentNode; 

    remtr.parentNode.removeChild(remtr); 
} 
function del_id(id) 
{ 
     del_tr(document.getElementById(id)); 
} 
</script> 

si coloca

<a href='' onclick='del_tr(this);return false;'>x</a> 

en cualquier lugar dentro de la fila que desea eliminar, que incluso funciona sin ningún ID

Cuestiones relacionadas