2010-03-26 12 views
11

Tengo una fila de tabla, y dentro de eso, tengo una td (lo que representa). Me gustaría cambiar el atributo de clase del TR en el que está mi TD sin usar una ID o un nombre. De esa manera:Acceso de Javascript TR desde TD

<tr> 
    <td onclick="[TR].setAttribute('class', 'newName')">My TD</td> 
</tr> 

¿Cómo lo hago?

+2

etiquetas son para los datos de la tabla – thecoshman

+2

es increíble la cantidad de respuestas han ido straigh t para jQuery (a pesar de ser la cosa * más simple posible, incluso en DOM antiguo), y luego todavía tiene la sintaxis incorrecta. – bobince

+0

Eso se debe a que la respuesta ha cambiado después de haber respondido algunas preguntas. – Joop

Respuesta

27

td stands para datos de la tabla ..

ahora .. en su caso de que necesite la propiedad parentNode del td ..

<tr> 
<td onclick="this.parentNode.setAttribute('class', 'newName')">My TD</td> 
</tr> 

o como bobince sugirió en su comentan

<td onclick="this.parentNode.className= 'newName'">My TD</td> 
+0

+1 para resolver el problema sin usar la ID (como se solicita en la pregunta) o confiar en Jquery – thecoshman

+0

¡PERFECTO! datos de la tabla ... Ya veo. ¡Gracias! – arik

+6

'setAttribute ('clase')' no funciona bien en IE6-7. Hay muchos atributos en los que IE se equivoca: evite 'getAttribute' /' setAttribute' en los documentos HTML por este motivo. En su lugar, use las propiedades HTML DOM Nivel 1: 'this.parentNode.className = 'newName'' es más compatible y más legible. – bobince

-3

jQuery es probablemente la forma más fácil de hacer esto, puede utilizar selectores tales como:

$('table.mytable tr').addClass('red'); 

Para agregar una clase de 'rojo' a todos los de pa en table.mytable. Esa es solo la punta del iceberg. Comprueba que debe hacer lo que necesites.

+0

Eso no responde la pregunta en absoluto. Básicamente, simplemente le dijiste que buscara cómo usar jQuery. No es útil en absoluto. –

11

En jQuery, que sería muy sencillo si se tiene la referencia a su td:

$(this).closest('tr'); 

Si realmente no quiere tener una dependencia de jQuery, entonces se podría simplemente hacer un bucle conseguir parentNode y verificando su tipo como una solución más general. En este caso, puede obtener el parentNode ya que tr es siempre un padre directo de td. Se puede hacer algo como esto (en cuenta que esto no ha sido probado):

var parent = myTd.parentNode; 
while(true) { 
    if(parent == null) { 
    return; 
    } 
    if(parent.nodeName === "TR") { 
    return parent; 
    } 
    parent = parent.parentNode; 
} 
+0

se da cuenta de que entonces todos los si tiene el código HTML compartir el mismo padre, que no están anidados debajo de los otros. Ellos son hermanos. – thecoshman

+0

Sí, he reparado la respuesta para señalar que el mío es un script de propósito más general. –

+0

Debe ser parent.nodeName === "TR" en lugar de parent.nodeName = "TD" – Ms2ger

0

Si puede utilizar jQuery que podría ser algo como esto

$("yourtdselector").closest("tr").attr("class","classname"); 

Para su código

<tr> 
    <td onclick="changeClass(this,'classname')">My TD</td> 
</tr> 

function changeClass(elem, class) 
{ 
    elem.parentNode.className = class; 
} 
-3

Sin cualquier marco adicional:

document.getElementById("theTableName").rows[1].cells[1].className = "someclassname"; 
+2

Eso no lo está obteniendo basado en un td. –

1

si tiene el elemento dom en javascript, puede usar .parentNode() que le dará el nodo perant, que debería ser la fila de la tabla. entonces se puede establecer .className

+3

Es en realidad parentNode. –

+0

Gracias, actualizado. – thecoshman

+0

en javascript es solo: ** document.getElementById ("someTDitem"). ParentNode.style.background = '# 77dd77'; ** – Fattie

Cuestiones relacionadas