name - jQuery "seleccionar todo excepto"
jquery selector id (6)
Estoy tratando de seleccionar la primera fila de una tabla. Nota: la primera fila está envuelta en una etiqueta thead
, por lo que:
<table>
<thead>
<tr> <!-- first row --> </tr>
</thead>
<tbody>
<tr> <!-- body --> </tr>
</tbody>
<tfoot>
<tr> <!-- body --> </tr>
</tfoot>
</table>
La sugerencia de ''seleccionar primera fila'' podría funcionar si no fuera por las etiquetas de envoltura. Esto es lo que he intentado pero no funciona:
$("*:not(thead)", tableSelector).remove();
Es decir, me gustaría deshacerme de los selectores tbody y tfoot usando un selector "no tfoot". Porque quiero eliminar todo lo demás de la tabla excepto el <thead>
y everything-inside-thead. Básicamente, lo que estoy tratando de hacer es seleccionar todo excepto Thead y lo que está dentro de él; de manera intuitiva algo como :not(thead *)
podría funcionar, pero no lo hace.
Mi solución es $("tbody, tfoot", tableSelector).remove();
pero me gustaría aprender y entender cómo usar el opuesto (no selector).
Estoy tratando de seleccionar la primera fila de una tabla.
¿Por qué no usar buen DOM viejo?
mytable.rows[0]
El pseudo-selector ": not" recibe otro selector como parámetro, por lo que puede eliminar todo excepto este y otro similar:
$('':not(thead, thead *)'', ''table'').remove();
Puedes verlo en acción aquí .
Esto es muy similar a lo que escribiste en tu comentario , excepto que no usaste un contexto (que eliminó el nodo de la tabla) y usaste el operando de los niños que no incluía "todo" dentro del contenido, sino que incluía solo su niños directos Al eliminar el operando de los hijos ">" se excluyen todos los descendientes del nodo, no solo los hijos directos.
El uso de children() en el selector de tabla seleccionará solo los hijos directos. Puedes filtrar esto usando tu no selector.
$(tableSelector).children('':not(thead)'').remove();
Seré como
$(''table thead tr:first-child'')
Si desea eliminar cualquier elemento secundario de una table
excepto thead
, pruebe este selector:
table > *:not(thead)
Editar Ya que señalaste que ya tienes la tabla en una variable:
$("> *:not(thead)", context)
Su pregunta no es exactamente clara. Para seleccionar la primera fila en una sola tabla:
$("table tr:first")...
o al revés:
$("table tr:not(:first)")...
lo hará pero se interrumpirá si hay más de una tabla (solo seleccionará una fila incluso si hay tres tablas). Puedes trabajar alrededor de eso con:
$("table").each(function() {
$(this).find("tr:first")...
});
Puedes obtener todas las filas que no estén en THEAD con:
$("table > :not(thead) > tr")...
Edit: Creo que estás complicando esto en exceso. Si desea eliminar todo excepto THEAD y su contenido, eso es relativamente simple:
$("table > :not(thead)").remove();
Si desea dejar los elementos TBODY y TFOOT en su lugar, cambie a:
$("table > :not(thead) > tr").remove();