He aplicado un estilo de la siguiente manera y me funciona muy bien:

$("td[id='cellId']").css("text-align", "left");

Sin embargo, necesito que ese estilo solo se aplique al TD SI contiene cuadros de texto y NO botones de radio.

He buscado arriba y abajo, pero find(), contains() y los "Me gusta" no parecen funcionar.

1
AMAR PANRAY 24 dic. 2016 a las 03:34

3 respuestas

La mejor respuesta

Si necesita filtrar TD-s que contienen cuadros de texto y NO botones de radio, entonces necesita usar la combinación :has y :not:

 $("td:not(:has(input[type='radio']))").has("input[type='text']").css("background", "red");

Aquí hay un fragmento donde las celdas filtradas tienen un fondo rojo. Puedes aplicarles cualquier estilo.

$("td:not(:has(input[type='radio']))").has("input[type='text']").css("background", "red");
td {
    border: 1px solid green;
    padding: 5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
 <tr>
  <td><input type="text">cell-1-1</td>
  <td><input type="radio">cell-1-2</td>
  <td><input type="text"><input type="radio">cell-1-3</td>
 </tr>
 <tr>
  <td><input type="radio">cell-2-1</td>
  <td><input type="text">cell-2-2</td>
  <td>cell-2-3</td>
 </tr>
</table>
1
Banzay 24 dic. 2016 a las 01:14

Use el selector :has() para unir elementos que contengan otros elementos.

$("td#cellId:has(:text)").css("text-align", "left");
1
Barmar 24 dic. 2016 a las 00:52

Primero tenga en cuenta que su $("td[id='cellId']") es bastante sorprendente: creo que tiene algo de var cellId que contiene la identificación de la celda, por lo que debe usar $('#' + cellId).

Ahora, dado que no precisó sobre los elementos anidados (eventualmente) en el td, debemos asegurar que no haya ningún botón de radio dentro de él.
De todos modos, supongamos que tenemos var cellElem que ha rellenado según sea necesario (puede ser como se muestra arriba).

Entonces puedes usar algo como esto:

if (!cellElem.find([type=radio]).length) {
    cellElemn.css(textAlign: 'left');
}
0
cFreed 24 dic. 2016 a las 00:58