tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
457
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    hanzen hanzen ist offline Mitglied Bronze
    Registriert seit
    Aug 2004
    Beiträge
    29
    Hallo,

    ich habe grade folgendes Problem.
    Ich würde gerne dem a href im ersten li der ul#navi_images eine Klasse verpassen.
    Mit dem a schien es nicht zu klappen, daher habe ich nun erstmal versucht nur der li die Klasse zu geben und zwar so:

    Code :
    1
    2
    
    var first_img = window.document.getElementById('navi_images').firstchild;
    first_img.className = "active";

    Irgendwie scheint er mit der ersten Zuweisung der Variable auch kein Problem zu haben, aber dann mit der zweiten Zeile. Da bekomme ich immer ein:
    "first_img has no properties"

    Aber müßte es nicht vom Prinzip her so funktionieren?
    Irgendwie verstehe ich es nicht.
    Wäre nett wen mir jemand auf die sprünge helfen könnte.

    Danke, Hannes
     

  2. #2
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Du musst auf die korrekte „camel case“-Schreibweise achten:
    Code :
    1
    
    var first_img = window.document.getElementById('navi_images').firstChild;
     
    Markus Wulftange

  3. #3
    hanzen hanzen ist offline Mitglied Bronze
    Registriert seit
    Aug 2004
    Beiträge
    29
    Arg!
    Ja, stimmt, danke, jetzt meckert er nicht mehr.

    Aber irgendwie scheint es nicht zu klappen mit firstChild das erste li anzusprechen.
    Das funktioniert (ul#bla):
    Code :
    1
    2
    
    mein = window.document.getElementById('bla');
    mein.className = 'active';

    Aber sobald ich quasi die erste li in der ul#bla anspreche passiert nichts mehr, auch wenn es eine CSS Klasse
    Code :
    1
    
    ul#bla li.active {color: red;}
    gibt.

    Also hierbei passiert nichts, aber es gibt auch keinen Fehler:
    Code :
    1
    2
    
    mein = window.document.getElementById('bla').firstChild;
    mein.className = 'active';

    Eigentlich will ich ja auch das a im li ansprechen, aber wenn ich es so mache...
    Code :
    1
    2
    
    mein = window.document.getElementById('bla').firstChild;
    mein.a.className = 'active';
    ...hat er wieder keine Properties, obwohl es ein a in dem li gibt.

    Hiermit hab ich rumprobiert:
    HTML-Code:
    <ul id="bla">
    	<li><a href="#">eins</a></li>
    	<li><a href="#">zwei</a></li>
    	<li><a href="#">drei</a></li>
    	<li><a href="#">vier</a></li>
    </ul>

    Vielleicht ist es auch die falsche Herangehensweise?
    Hast Du noch ein Tipp?
     

  4. #4
    Avatar von Biergamasda
    Biergamasda Biergamasda ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    373
    hast schon mal
    Code javascript:
    1
    
    mein.firstChild.className = 'active';
    probiert?
     

  5. #5
    hanzen hanzen ist offline Mitglied Bronze
    Registriert seit
    Aug 2004
    Beiträge
    29
    Gute Idee, aber leider regt sich da auch nichts. Kein Fehler, aber auch kein Ergebnis.
    Mit
    Code :
    1
    
    mein.firstChild.a.className = 'active';
    dann wieder keine Properties.

    Irgendwie will das nicht.
     

  6. #6
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Das erste Kindelement ist in diesem Fall nur ein Textelement, nämlich der Text zwischen dem Start-Tag des ul-Elements und dem Start-Tag des ersten li-Elements.
     
    Markus Wulftange

  7. #7
    hanzen hanzen ist offline Mitglied Bronze
    Registriert seit
    Aug 2004
    Beiträge
    29
    Zitat Zitat von Gumbo Beitrag anzeigen
    Das erste Kindelement ist in diesem Fall nur ein Textelement...
    Wie recht Du hast. Herje, ich hasse javascript, aber wenn man auch mal den DOM Inspector benutzt, dann ist es auch gleich alles ein bisschen einfacher

    Damit klappt es:
    Code :
    1
    2
    
    mein = window.document.getElementById('bla').childNodes[1].firstChild;
    mein.className = 'active';
    Allerdings frage ich mich, warum das nicht klappt:
    Code :
    1
    2
    
    mein = window.document.getElementById('bla').childNodes[1].a;
    mein.className = 'active';

    Ist das nicht beides das selbe? Auch mit einem großen "A" geht es nicht. Ich hab zwar jetzt, was ich will, aber interssieren würde es mich trotzdem.

    Danke für den Denkanstoß, Hannes


    p.s.
    Nun ist mir grade aufgefallen das der IE es nur richtig macht, wenn ich childNodes[0] nehme. Der zählt da anders. Der hat kein Textelement dazwischen. Hast du das evtl. auch einen Anstoß?
    Geändert von hanzen (30.10.06 um 22:34 Uhr)
     

  8. #8
    hanzen hanzen ist offline Mitglied Bronze
    Registriert seit
    Aug 2004
    Beiträge
    29
    Habe es jetzt so gemacht, aber irgendwie ist das ganz schön häßlich, oder?

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
        navRoot = document.getElementById('bla');
        for (i=0; i<=1; i++) {
            node = navRoot.childNodes[i];
            if (node.nodeName=="LI") {
                node.firstChild.className="active";
                break;
            }
        }
    Aber javascript ist ja immer irgendwie häßlich. Oder liegt es gar an mir? Ne, oder?
     

  9. #9
    Avatar von hela
    hela hela ist offline Mitglied Smaragd
    tutorials.de Premium-User
    Registriert seit
    Oct 2004
    Beiträge
    1.123
    Zitat Zitat von hanzen Beitrag anzeigen
    ...Aber javascript ist ja immer irgendwie häßlich...
    Ja, man kann es aber auch noch häßlicher machen
    Mach es doch einfach so:
    Code :
    1
    2
    
    navRoot = window.document.getElementById('bla');
    navRoot.getElementsByTagName("li")[0].getElementsByTagName("a")[0].className = "active";
    Damit müsste es auch gehen.
     

  10. #10
    hanzen hanzen ist offline Mitglied Bronze
    Registriert seit
    Aug 2004
    Beiträge
    29
    Zitat Zitat von hela Beitrag anzeigen
    Ja, man kann es aber auch noch häßlicher machen
    Danke!

    Zitat Zitat von hela Beitrag anzeigen
    Mach es doch einfach so:
    Code :
    1
    2
    
    navRoot = window.document.getElementById('bla');
    navRoot.getElementsByTagName("li")[0].getElementsByTagName("a")[0].className = "active";
    Damit müsste es auch gehen.
    Das geht. Klasse. Diese Verkettungen hatte ich noch nicht so auf dem Schirm. Danke, das wird mir in Zukunft sicher noch öfters nützlich sein.

    Top Thread, ich danke, Hannes
     

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 17.01.11, 21:53
  2. Mit einer Klasse Objekte für eine andere Klasse erstellen.
    Von New2Java im Forum Java Grundlagen
    Antworten: 14
    Letzter Beitrag: 21.11.10, 12:37
  3. JGraph, Knoten eine min Größe vergeben
    Von osito150 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 15.05.09, 16:51
  4. Rechte für eine Tabelle vergeben
    Von Darian im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 14.04.09, 20:21
  5. Antworten: 14
    Letzter Beitrag: 23.01.05, 17:47