Zugriff auf Array von Tabellenzeilen

Fanatico

Mitglied
Hallo!

Ich habe eine Tabelle, in der jede Zeile eine ID hat!

Nun möchte ich per Javascript auf die Zeilen zugreifen.

Meine Lösung funktioniert aber nur im IE!

Die Alternativen die ich noch hatte klappen gar nicht:
Code:
teamReihe[i].className = "bg_red"; //funktioniert NUR im IE

document.getElementById("ps2flForm").teamReihe[i].className = "bg_red";

document.getElementById("teamReihe")[i].className = "bg_red";

Die anderen beiden überhaupt nicht.

Welcher Befehl muß denn nun verwendet werden, damit alle Browser auf die Zeilen zugreifen können?
 
Was ist denn genau in dem Array teamReihe[i] gespeichert?

Code:
 document.getElementById("teamReihe")[i].className = "bg_red";
Aus diesem Code schließe ich, dass du mehre Zeilen mit der Id "teamReihe" hast. Das ist nicht zulässig. Eine id muss im ganzen Dokument einzigart sein und darf nur einem einzigen Element zugewiesen sein. Wenn dem so ist, ist das der Fehler, denn nur der IE ist da etwas tolleranter, hält sich damit aber wieder nicht an den allgemein gültigen Standart.

Das hier funktioniert nämlich in jedem modernen Browser:
HTML:
<style type="text/css">
  .muha {
  	background-color:#FF0000;
  }
  </style>
  
  ( ... )
  
  <table>
  	<tr id="ich">
  		<td>&nbsp;</td>
  		<td>&nbsp;</td>
  	</tr>
  </table>
  
  <input type="button" value="Go!" onclick="
  	document.getElementById('ich').className = 'muha'
  " />
 
Es soll ja ein Array sein!

Und die sind zulässig.

Innerhalb einer Zeile befinden sich bei mir auch Dropdown Felder, die alle die gleiche Id haben und die validiere ich über JS.

Und wenn nun ein Fehler auftritt soll die betreffende Zeile einen anderen ClassName erhalten.

Anders als über Array geht das ja gar net.
 
Ja, Arrays sind durchaus zulässig - ich habe auch nichts anderes behauptet. Was nicht zulässig ist, sind mehrere Elemente, die eine Id haben. Amen - daran kannst du auch wenn du's noch so oft mit JS validierst nichts ändern. Du kannst sie enfach nicht mit getElementById ansprechen, weil diese Methode nunmal nur für ein einziges Element ausgelegt ist. Die Zuweisung von Classnames hilft da auch nicht, weil du sie erst ansprechen musst um ihnen classNames zu verpassen.

Es gibt numal bei getElementById nichts wie getElementById("teamReihe")[1] weil das anders als getElementsByName (wie der Plural Elements gegeüber dem Singular Element schon sagt) nicht für mehrere Elemente ausgelegt ist. Basta. Du wirst die Elemente, die jetzt noch die gleiche Id haben anders ansprechen und ihnen verschiedene id's geben müssen.

Wie schon gesagt: Mit einzigartigen Ids funktioniert es in jedem der großen Browser, wie mein Beispiel beweist.
 
Zuletzt bearbeitet:
Wie confuse schon sagte, eine ID darf nur einmal vergeben werden.
Der IE ist da etwas toleranter, und haut bei Formularfeldern name-und ID zusammen.

Das name-Attribut kannst du in Formularfeldern mehrfach vergeben...das wäre schon mal Punkt1 auf dem Weg zum korrekten Skript(ändere in den Dropdownfeldern überall das ID-Attribut in ein name-Attribut).

Bei den Zeilen geht das allerdings nicht, weil <tr> laut HTML kein name-Attribut besitzen.
Das brauchst du aber auch nicht.... da die Felder sich jeweils in der Zeile befinden, kannst du per parentNode auf die Zeile zugreifen.

genauer genommen musst du parentNode mehrmals anwenden, parentNode ist der Elternknoten eines Elements. Kleines Beispiel:
Code:
<form>
<table>
 <tr>
  <td>....
   <select onchange="this.parentNode.parentNode.style.backgroundColor='red'">
    <option>a
    <option>b
   </select>   
  </td>
 </tr>
</table>
</form>

...
this.parentNode.parentNode.style.backgroundColor='red';"
this.... ist das <select>
this.parentNode... ist der Elternknoten der liste, also <td>
this.parentNode.parentNode .... ist der Elternknoten der <td>...also <tr>

Ist doch viel übersichtlicher, als mit der ID, oder :)
 
Hab das Problem nun gelöst in dem ich die Elemente mit [ i ] durchnummeriert habe. Jetzt kapierts jeder Browser

Trotzdem danke für die Mühe!
 

Neue Beiträge

Zurück