Probleme mit getElementsByName
André
- javascript
0 Felix Riesterer0 Der Martin0 Cybaer
Moin zusammen,
ich habe ein Problem wo ich etwas Hilfe benötige.
Auf einer HTML-Seite, die mit PHP erzeugt wird, befinden sich eine unbekannte Anzahl von Tabellenzeilen. Allen Zeilen habe ich den gleichen Namen gegeben, z.B. so:
<tr name="zeile">
Nun möchte ich per Javascript die Style-Eigenschaften aller Zeilen, die den Namen "zeile" haben, verändern.
So sieht mein Script aus:
var Anzahl = document.getElementsByName('zeile').length;
for (var i=0; i<Anzahl; i++) {
document.getElementsByName('zeile')[i].style.display = 'block' }
Das funktioniert aber nicht. Die entsrechenden Kapitel in SELFHTML helfen mir auch nicht weiter.
Als erstes funktioniert die Eigenschaft .length nicht. Die gibt mir immer 0 zurück.
Sezte ich die Variable Anzahl manuell auf den richtigen Wert, klappt trotzdem die Zuweisung des Style-Attributes nicht. Ich erhalte die Fehlermeldung "'document.getElementsByName(...)[...].style' ist NULL oder kein Objekt"
Danke für Eure Hilfe.
Gruß, André
Lieber André,
var Anzahl = document.getElementsByName('zeile').length;
for (var i=0; i<Anzahl; i++) {
document.getElementsByName('zeile')[i].style.display = 'block' }
das ist nicht gut. Besser so:
var elemente = document.getElementsByName("zeile");
var anzahl = elemente.length; // Diese Zeile ist allerdings überflüssig!
for (var i = 0; i < elemente.length; i++) {
elemente[i].style.display = "block";
}
Als erstes funktioniert die Eigenschaft .length nicht. Die gibt mir immer 0 zurück.
Dann gibt es offensichtlich keine Elemente, die in ihrem name-Attribut den Wert "zeile" stehen haben.
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hallo Felix,
das ist nicht gut. Besser so:
var elemente = document.getElementsByName("zeile");
var anzahl = elemente.length; // Diese Zeile ist allerdings überflüssig!
for (var i = 0; i < elemente.length; i++) {
elemente[i].style.display = "block";
}
Das wird nach meiner Erfahrung zumindest im IE6 und darunter immer noch nicht funktionieren, wenn die entsprechende Display-Eigenschaft anfangs auf "none" steht. Der IE(<7) muss Tabellenzeilen erst einmal sichtbar rendern, dann kann man sie anschließend auch auf `display:none`{:.language-css} stellen und wieder zurück, indem man ihr diese Display-Eigenschaft durch Wegnehmen oder Setzen eines entsprechenden Klassennamens bzw. einer Untereigenschaft des Style-Objektes (leere Zeichenkette) wieder entzieht.
`display:block`{:.language-css} ist da mit Rücksicht auf vernünftige Browser sowieso keine gute Idee, da Tabellenzellen dort ja von Hause aus `display:table-row`{:.language-css} haben und nicht `display:block`{:.language-css}.
Gruß Gernot
--
[super me](http://community.de.selfhtml.org/my/visitenkarten/view.php?key=46)
Hallo André,
Auf einer HTML-Seite, die mit PHP erzeugt wird, befinden sich eine unbekannte Anzahl von Tabellenzeilen. Allen Zeilen habe ich den gleichen Namen gegeben, z.B. so:
<tr name="zeile">
tja, zu dumm, dass das name-Attribut für tr nicht zulässig ist.
Als erstes funktioniert die Eigenschaft .length nicht. Die gibt mir immer 0 zurück.
Richtig, die name-Attribute, die nicht erlaubt sind, werden ignoriert. Übrig bleiben - du ahnst es schon - Null.
Du wirst deinen Ansatz etwas verändern müssen. Streiche die name-Attribute in den tr-Elementen, gib stattdessen der entsprechenden Tabelle eine id und adressiere die Zeilen darin mit getElementsByTagName("tr"). Eventuell musst du sie noch anhand einer Klasse aussortieren, wenn nicht alle Zeilen in dieser Tabelle gleichartig sind.
So long,
Martin
Hi,
Nun möchte ich per Javascript die Style-Eigenschaften aller Zeilen, die den Namen "zeile" haben, verändern.
Dich könnte http://Coding.binon.net/Toggle interessieren. Damit wird auch ...
document.getElementsByName('zeile')[i].style.display = 'block' }
... dieser Fehler vermieden.
Gruß, Cybaer