2010-03-26 12 views
11

Ich habe eine Tabellenzeile, und innerhalb dieser habe ich eine td (was auch immer es steht). Ich möchte das Klassenattribut des TR ändern, in dem sich mein TD befindet, ohne eine ID oder einen Namen zu verwenden. So ähnlich:Javascript Zugriff TR von TD

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

Wie mache ich das?

+2

Tags für Tabellendaten sind – thecoshman

+2

Es ist erstaunlich, wie viele Antworten straigh gegangen t für jQuery (obwohl dies die * einfachst mögliche * Sache ist, die man selbst in einfachem alten DOM macht), und dann immer noch die Syntax falsch hat! – bobince

+0

Das ist, weil die Antwort geändert wurde, nachdem einige Fragen gegeben wurden. – Joop

Antwort

27

td steht für Tabellendaten ..

jetzt .. in Ihrem Fall müssen Sie die parentNode Eigenschaft des td ..

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

oder als bobince gesetzt vorgeschlagen in seinem Kommentar

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

+1 für die Lösung von Problemen mit der Verwendung von ID (wie in Frage gestellt) oder unter Berufung auf Jquery – thecoshman

+0

PERFEKT! Tabellendaten ... Ich verstehe. Vielen Dank! – arik

+6

'setAttribute ('class')' funktioniert nicht richtig in IE6-7. Es gibt viele Attribute, bei denen der IE es falsch interpretiert: Vermeiden Sie 'getAttribute' /' setAttribute' aus diesem Grund in HTML-Dokumenten. Verwenden Sie stattdessen HTML-Eigenschaften von DOM Level 1: 'this.parentNode.className = 'newName'' ist kompatibler und besser lesbar. – bobince

-3

jQuery ist wahrscheinlich der einfachste Weg, dies zu tun, Sie Selektoren wie verwenden können:

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

So fügen Sie eine Klasse von ‚rot‘ auf alle tr des in table.mytable. Das ist nur die Spitze des Eisbergs - schau es dir an, es sollte tun, was du brauchst.

+0

Das beantwortet die Frage überhaupt nicht. Du hast ihm im Grunde gesagt, er soll nachsehen, wie man jQuery benutzt. Überhaupt nicht nützlich. –

11

In jquery, wäre es wirklich einfach, wenn Sie den Verweis auf Ihre td haben:

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

Wenn Sie wirklich eine Abhängigkeit von jQuery nehmen Sie nicht wollen, dann könnte man einfach eine Schleife tun bekommen der parentNode und die Überprüfung des Typs als allgemeinere Lösung. In diesem Fall könnten Sie einfach den Elternknoten erhalten, da tr immer ein direkter Elternteil von td ist. Sie können etwas tun (man beachte dies nicht getestet wurde):

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

Sie erkennen, dass, wenn Sie die HTML haben dann all die die gleichen Eltern teilen, sind sie nicht untereinander verschachtelt. Sie sind Geschwister. – thecoshman

+0

Ja, ich habe die Antwort korrigiert, um festzustellen, dass es sich um ein Skript für allgemeinere Zwecke handelt. –

+0

Sollte parent.nodeName === "TR" anstelle von Parent sein.nodeName = "TD" – Ms2ger

0

Wenn Sie jQuery verwenden kann es so etwas wie dieses

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

Für Ihren Code

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

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

werden könnten, ohne irgendein zusätzliches Rahmenwerk:

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

Das ist nicht auf einem td basiert. –

1

Wenn Sie das dom-Element in JavaScript haben, können Sie .parentNode() verwenden, was Ihnen den perant-Knoten gibt, der die Tabellenzeile sein sollte. dann können Sie .className

+3

Es ist tatsächlich parentNode. –

+0

Danke, aktualisiert. – thecoshman

+0

in Javascript ist es nur: ** document.getElementById ("someTDitem"). ParentNode.style.background = '# 77dd77'; ** – Fattie

Verwandte Themen