2010-03-26 4 views
11

J'ai une rangée de table, et à l'intérieur de celle-ci, j'ai un td (quoi que ce soit). Je voudrais changer l'attribut de classe du TR dans lequel se trouve TD sans utiliser d'identifiant ou de nom. Comme ça:Accès Javascript TR de TD

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

Comment faire?

+2

balises sont pour les données de table – thecoshman

+2

Il est étonnant de voir combien les réponses sont allés straigh t pour jQuery (bien que ce soit la chose * la plus simple possible * à faire même dans un vieux DOM ordinaire), et encore la syntaxe est incorrecte! – bobince

+0

C'est parce que la réponse a été changée après que quelques questions aient été données. – Joop

Répondre

27

td représente des données de table ..

maintenant .. dans votre cas, vous devez la propriété parentNode du td ..

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

ou bobince suggéré dans son commentaire

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

+1 pour résoudre le problème sans utiliser l'ID (comme demandé en question) ou en se basant sur Jquery – thecoshman

+0

PARFAIT! données de tableau ... Je vois. Je vous remercie! – arik

+6

'setAttribute ('class')' ne fonctionne pas correctement dans IE6-7. Il existe de nombreux attributs où IE se trompe: évitez 'getAttribute' /' setAttribute' dans les documents HTML pour cette raison. À la place, utilisez les propriétés HTML du DOM niveau 1: 'this.parentNode.className = 'newName'' est plus compatible et plus lisible. – bobince

-3

jQuery est probablement la meilleure façon de le faire, vous pouvez utiliser des sélecteurs tels que:

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

Pour ajouter une classe de « rouge » à tous les tr est dans table.mytable. Ce n'est que la pointe de l'iceberg - vérifiez qu'il devrait faire ce dont vous avez besoin.

+0

Cela ne répond pas du tout à la question. Vous lui avez simplement dit d'aller chercher comment utiliser jQuery. Pas utile du tout. –

11

En jquery, il serait très simple si vous avez la référence à votre td:

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

Si vous ne voulez vraiment pas prendre une dépendance sur jQuery, alors vous pouvez faire une boucle d'obtenir le parentNode et en vérifiant son type comme une solution plus générale. Dans ce cas, vous pouvez simplement obtenir le parentNode puisque tr est toujours un parent direct de td. Vous pouvez faire quelque chose comme ça (notez cela n'a pas été testé):

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

vous vous rendez compte que si vous avez le code HTML alors tous ceux partagent le même parent, ils ne sont pas imbriqués dans l'autre. Ils sont frères et sœurs. – thecoshman

+0

Ouais, j'ai corrigé la réponse pour noter que le mien est un script plus généraliste. –

+0

Devrait être parent.nodeName === "TR" plutôt que parent.nodeName = "TD" – Ms2ger

0

Si vous pouvez utiliser jQuery il pourrait être quelque chose comme ça

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

Pour votre code

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

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

Sans tout cadre supplémentaire:

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

Ce n'est pas basé sur un td. –

1

Si vous avez l'élément dom dans javascript, vous pouvez utiliser .parentNode() puis qui vous donnera le noeud pérant, qui devrait être la ligne du tableau. vous pouvez définir .className

+3

C'est en fait parentNode. –

+0

Merci, mis à jour. – thecoshman

+0

dans javascript c'est juste: ** document.getElementById ("someTDitem"). ParentNode.style.background = '# 77dd77'; ** – Fattie

Questions connexes