Mehrere DIVs per JS ausblenden
Sven
- javascript
Hallo ihr,
ich möchte mehrere DIV-Elemente ausblenden, die allesamt den gleichen Namen haben. Also:
<div name="abc" ...>
Dafür habe ich folgendes versucht:
function hidefieldsName(nname) {
for(i=0; i<nname.length; i++) {
document.getElementsByName(nname)[i].style.display = 'none';
}
}
hidefieldsId('abc');
Es funktioniert zwar, die DIVs werden ausgeblendet. Dennoch meldet mir Firefox: "document.getElementsByName(nname)[i] is undefined"
Kann mir jemand verraten, warum? Was ist verkehrt?
Lg
Sven
Hi Sven!
Kann mir jemand verraten, warum? Was ist verkehrt?
nname.length
Du meintest sicher document.getElementsByName(nname).length...
Tipp: Lege dir eine Variable an, in der du das Array, das getElementsByName zurückgibt speicherst.
MfG H☼psel
Du meintest sicher document.getElementsByName(nname).length...
Tipp: Lege dir eine Variable an, in der du das Array, das getElementsByName zurückgibt speicherst.
getElementsByName liefert kein Array zurück, sondern eine NodeList. Zumindest sollte es so sein, der FF2 gibt anscheinend eine HTMLCollection zurück, der Lümmel.
Kurtz gegrüßt
getElementsByName liefert kein Array zurück, sondern eine NodeList. Zumindest sollte es so sein, der FF2 gibt anscheinend eine HTMLCollection zurück, der Lümmel.
sowas wird IMHO als "Array-Like-Object" subsummiert. Wichtig ist das .length definiert ist.
Grüße
Kurt
Hi Timo!
getElementsByName liefert kein Array zurück, sondern eine NodeList.
Es ist ja nicht meine Schuld, dass dieses Array fälschlicherweise als Liste bezeichnet wird. =)
MfG H☼psel
Kurtz gegrüßt
Kann mir jemand verraten, warum? Was ist verkehrt?
FF geht wohl wie ich davon aus, das name analog zu id *einmalig* sein sollte.
Ich würde deinen ansatz nicht wählen, ich weise bei sowas z.B. eine eigene css-class zu und suche alle Elemente die sie enthalten. Alternativ kannst du auch die class manipulieren, dasss könnte mit älteren Browsern problematisch werden.
Grüße
Kurt
Kurtz gegrüßt
ich relativiere mal was ich gesagt habe, wenn name eindeutig sein müsste würd bei getElementsByName kein plural stehen.
Allerdings bleib ich skeptisch, da gabs mal Probleme...
Grüße
Kurt
Hi KurtZ!
Allerdings bleib ich skeptisch, da gabs mal Probleme...
Probleme bereitet dem Threadersteller die Tatsache, dass er aufgrund der Stringlänge der ID, die er übergibt, entscheidet, welcher Index auf das Array der Div-Elemente zugreift.
Er möchte aber anhand der Länge des Arrays die Obergrenze der For-Schleife festlegen.
Dass der Firefox mit dieser Funktion Probleme haben sollte, bezweifle ich stark.
MfG H☼psel
Kurtz gegrüßt
Dass der Firefox mit dieser Funktion Probleme haben sollte, bezweifle ich stark.
FF vielleicht nicht, aber ich halte eine Markierung der auszublenden Divs mit "name" für riskant. Irgendein IE-Bug-Neuron feuert da bei mir, aber ich bin zu faul zu recherchieren. Irgendwo werden name und id gleichgesetzt...
Mit ID *muss* er eindeutig werden, ich nutze wie gesagt deswegen eine eigene class um wegzublenden Divs auszuzeichnen.
Ich hab das mal vor ca. 2 Jahren so umständlich realisieren müssen, und für unnötige Workarounds bin ich eigentlich zu faul. ; )
Grüße
Kurt
Hi KurtZ!
Man könnte ja auch mit getElementsByTagName arbeiten und den Namen überprüfen. Damit dürfte der IE keine Probleme haben.
MfG H☼psel
Hi H☼psel
Man könnte ja auch mit getElementsByTagName arbeiten und den Namen überprüfen. Damit dürfte der IE keine Probleme haben.
wie von JuergenB schon angedeutet ist name kein Universalattribut
http://de.selfhtml.org/html/referenz/attribute.htm#div
Man macht sich hier sonst von der Interpretationsfreiheit der Browser abhängig.
Grüße
Kurt
Hi,
FF vielleicht nicht, aber ich halte eine Markierung der auszublenden Divs mit "name" für riskant.
NAME ist bei DIV nicht erlaubt - alles weitere mithin "Zufall". Gleichwohl funktioniert es in den üblichen Browsern (auch wenn ich mich bestimmt nicht drauf verlassen würde). Bis auf Opera (zumindest bis 8.x - keine Ahnung, was der 9.x macht). Der verweigert sich!
Irgendein IE-Bug-Neuron feuert da bei mir, aber ich bin zu faul zu recherchieren. Irgendwo werden name und id gleichgesetzt...
Der IE kann mit getElementsByName() auch dann arbeiten, wenn NAME im Tag nicht erlaubt ist. Aber er benutzt für NAME und ID den selben Namespace (was logischerweise zu Fehlern führen kann). Wird erst mit IE 8 geändert.
Mit ID *muss* er eindeutig werden, ich nutze wie gesagt deswegen eine eigene class um wegzublenden Divs auszuzeichnen.
Ich benutze ein eigenes Attribut oder eine ID, mit identischem Anfang (und selektiere dann anhand dieses Anfangs).
Gruß, Cybaer
Hi Cybaer,
danke dass du meine Kritik unterfütterst!
Ich benutze ein eigenes Attribut oder eine ID, mit identischem Anfang (und selektiere dann anhand dieses Anfangs).
"ID mit identischem Anfang" ist ne interessante Idee und erlaubt dann verschiede CSS-Klassen zu nutzen... merk ich mir, Danke!!! : )
"benutze ein eigenes Attribut" lässt bei mir Fragen offen, erlaubt das DOM sich neue Attributnamen zu definieren, oder sind die Mainstreambrowser so tolerant?
Wahrscheinlich letzteres, weil die Browser aufwärtskompatibel zu eventuellen Erweiterungen des HTML-Standards bleiben wollen.
Grüße
Kurt
Kurtz gegrüßt
"benutze ein eigenes Attribut" lässt bei mir Fragen offen, erlaubt das DOM sich neue Attributnamen zu definieren, oder sind die Mainstreambrowser so tolerant?
Mal ein Selbstgespräch:
Das Document Object Model wird das erlauben weil JS es fast immer erlaubt einem Objekt neue Attribute zuzuweisen, auch HTML-Objekten.
Spiegelt sich das aber auch auf HTML-Parser-ebene wieder, dass man einem Tag neue Fantasieattribute zuweisen darf???
Wahrscheinlich kann man es zumindest ungestraft. Oder?
Grüße
Kurt
Hi,
Spiegelt sich das aber auch auf HTML-Parser-ebene wieder, dass man einem Tag neue Fantasieattribute zuweisen darf???
Ja, wenn der Parser da Probleme bereitet, ist es per definitionem kein HTML-Parser.
Gruß, Cybaer
Hi,
"ID mit identischem Anfang" ist ne interessante Idee und erlaubt dann verschiede CSS-Klassen zu nutzen...
Versch. "CSS-Klassen" kann man aber auch so nutzen - falls ich dich richtig verstanden habe. Aber auch ich nutze HTML-Klassen (i.d.R.) lieber exklusiv für CSS und nicht für sonstige Dinge.
"benutze ein eigenes Attribut" lässt bei mir Fragen offen, erlaubt das DOM sich neue Attributnamen zu definieren, oder sind die Mainstreambrowser so tolerant?
Sind sie nicht nur, sie müssen es sogar sein.
Wahrscheinlich letzteres, weil die Browser aufwärtskompatibel zu eventuellen Erweiterungen des HTML-Standards bleiben wollen.
So ist es. Unbekannte Attribute sind seit dem Ur-HTML pflichtgemäß zu ignorieren, und mit HTML 5 wurde auch definiert, daß unbekannte Attribute auch in JS/DOM abzubilden sind.
Es gibt aber, HTML 5 hin oder her, auch bislang keinen Browser, der damit ein Problem gehabt hätte - und nun ist es "offiziell".
Gruß, Cybaer
Kurtz gegrüßt
So ist es. Unbekannte Attribute sind seit dem Ur-HTML pflichtgemäß zu ignorieren, und mit HTML 5 wurde auch definiert, daß unbekannte Attribute auch in JS/DOM abzubilden sind.
Es gibt aber, HTML 5 hin oder her, auch bislang keinen Browser, der damit ein Problem gehabt hätte - und nun ist es "offiziell".
Danke, fachlich sehr hilfreich!!! : )
Grüße
Kurt
Hallo Sven,
<div name="abc" ...>
nicht alle Elemente dürfen einen Namen haben. Nimm lieber eine ID
function hidefieldsName(nname) {
for(i=0; i<nname.length; i++) {
name ist ein String ("abc") mit der Länge 3!
document.getElementsByName(nname)[i].style.display = 'none';
und daher suchst du drei Elemente mit den Namen "abc"
}
}hidefieldsId('abc');
Gruß, Jürgen
name ist ein String ("abc") mit der Länge 3!
sorry, soll nname heißen.
Gruß, Jürgen