getElementsById funktioniert nicht

Hallo Profis,

noch alles Gute für 2011!!!

Ich habe eine Seite mit Frames (jaja, ich weiß!), in der ich diverse Elemente mit getElementsById ansprechen möchte. Komischerweise funktioniert es nur, wenn ich die Elemente mit id=„bla“ auszeichne, bei name=„bla“ wird es vom Script nicht gefunden. Warum?

Und warum kann ich mit

parent.frames['ErsterFrame'].document.getElementsByName("Bla")[0].innerHTML

das Element eines anderen Frames nicht ansprechen?

Vielen Dank und bestliche Grüße
-Rob.

Hallo,

diverse Elemente mit getElementsById ansprechen möchte.

Also mit getElement s ById sollte es gar nicht gehen. Da innerhalb einer Seite jede ID nur einmal vorkommen darf, kann immer nur ein Element gefunden werden - also ohne das s.

Komischerweise funktioniert es nur, wenn ich die Elemente mit
id=„bla“ auszeichne, bei name=„bla“ wird es vom Script nicht
gefunden. Warum?

Weil die Funktion nach IDs sucht, nicht nach Namen. Daher heisst sie auch getElement ById

Und warum kann ich mit

parent.frames[‚ErsterFrame‘].document.getElementsByName(„Bla“)[0].innerHTML

das Element eines anderen Frames nicht ansprechen?

Aus Sicherheitsgründen. Sonst wäre es relativ einfach, fremde Seiten zu embedden und dann manipulieren, was dir z.B. beim online-banking nicht gefallen würde.

Grüße,
Moritz

Hallo Rob,

Dir auch ein gutes Neues :smile:)

es heißt getElementById ( -s )
name und id sind 2 unterschiedliche Element-Attribute

getElementsByName liefert ein array
insofern ist Dein Beispiel richtig!
Der Zugriff müsste … sofern er nicht gegen Same Origin Police verstößt … erfolgreich sein.

Gruß
Klaus

Salu Klaus,

Dir auch ein gutes Neues :smile:)

Danke Dir :o)

es heißt getElementById ( -s )
name und id sind 2 unterschiedliche Element-Attribute

Klar, da hatte ich mich auch nur hier vertippt. Denn tatsächlich verhält es sich so: Ich wollte mit

getElementsByName

auf ein

 zugreifen, aber das klappt nur wenn ich das Element 

     auszeichne. Und das sollte doch eigentlich nicht sein, oder? Ich kann diese Elemente sogar gezielt im Array ansprechen, obwohl mehrere dieselbe id haben. Warum klappt all das nicht mit name=?
    
    
    
    > getElementsByName liefert ein array  
    > insofern ist Dein Beispiel richtig!  
    > Der Zugriff müsste ... sofern er nicht gegen Same Origin  
    > Police verstößt ... erfolgreich sein.
    
    
    Tuts auch erst, seit ich auch hier die Elemente mittels id benannt habe, und sie mit 
    
        getElementsByName
    
     anspreche. Ist doch wirklich seltsam...
    
    Danke und bestliche Grüße
    -Rob.

Hallo Rob,

Tuts auch erst, seit ich auch hier die Elemente mittels id
benannt habe, und sie mit

getElementsByName

anspreche. Ist doch wirklich seltsam…

… jaaaa … wirklich sehr seltsam !!!

  1. getElementsByName dürfte id nicht finden

  2. der td-tag hat lt. W3C kein Standard-Attribut name
    es wäre also in diesem Fall ein custom-attribut, dessen Wert mittels getAttribute(‚name‘) auszulesen ist.

Es dürfte sich hierbei mehr um einen bug handeln, als ein feature. :smile:)
Und natürlich nicht in jedem Browser funktionieren!!!

Gruß
Klaus

Bug!
Hallo Klaus,

Tuts auch erst, seit ich auch hier die Elemente mittels id
benannt habe, und sie mit

getElementsByName

anspreche. Ist doch wirklich seltsam…

… jaaaa … wirklich sehr seltsam !!!

  1. getElementsByName dürfte id nicht finden

Habe es jetzt nochmal gründlich durchgetestet: Auf names spricht getElementsByName nicht an, auf id schon (alles im IE8). Echt blöd…

  1. der td-tag hat lt. W3C kein Standard-Attribut name
    es wäre also in diesem Fall ein custom-attribut, dessen Wert
    mittels getAttribute(‚name‘) auszulesen ist.

Jaja, das habe ich befürchtet. DOM ist auch noch nicht universell… Ach, es ist doch echt zum kacken!

Danke für Deine Hilfe und schon mal ein schönes Wochenende (hier ist ja heute schon Feiertag).

Grüßken
-Rob.

Mißverständnis
Hallo Moritz,

Also mit getElement s ById sollte es gar nicht gehen. Da
innerhalb einer Seite jede ID nur einmal vorkommen darf, kann
immer nur ein Element gefunden werden - also ohne das s.

Klar, Schreibfehler meinerseits. Ich hatte es richtig gemacht, mich nur hier vertippt (s. o.).

Komischerweise funktioniert es nur, wenn ich die Elemente mit
id=„bla“ auszeichne, bei name=„bla“ wird es vom Script nicht
gefunden. Warum?

Weil die Funktion nach IDs sucht, nicht nach Namen. Daher
heisst sie auch getElement ById

Das hatte ich aber schon richtig geschrieben: Ich habe mit getElementsByName gesucht (und nur ids gefunden).

Und warum kann ich mit

parent.frames[‚ErsterFrame‘].document.getElementsByName(„Bla“)[0].innerHTML

das Element eines anderen Frames nicht ansprechen?

Aus Sicherheitsgründen. Sonst wäre es relativ einfach, fremde
Seiten zu embedden und dann manipulieren, was dir z.B. beim
online-banking nicht gefallen würde.

Dat macht keenen Sinn, wa!? Ich greife doch nur auf verschiedene Frames derselben Quelle und innerhalb einer Seite zu. Bisher hatte das auch immer geklappt (z. B. in einer separaten Script-Datei auf jedes einzelne Frame, oder Seiteninhalte in einem anderen Frame laden). Nur eben das getElementsByName hatte nicht geklappt. Da hast Du vermutlich was falsch verstanden, denn mit id hauts ja auch hin, und das wäre aus den genannten Sicherheitsgründen natürlich auch verboten.

Grüßken
-Rob.

hi Rob,

Habe es jetzt nochmal gründlich durchgetestet: Auf names
spricht getElementsByName nicht an, auf id schon (alles im
IE8). Echt blöd…

hatte es mir schon gedacht, dass es der IE ist :smile:)

was hast Du vor?
sieht so aus, als ob Du eine Reihe von td’s ändern willst.
würde auch mit getElementsByTagName und getAttribute gehen - browserübergreifend !!!

Jaja, das habe ich befürchtet. DOM ist auch noch nicht
universell… Ach, es ist doch echt zum kacken!

leider werden Browser nicht bestraft, wenn sie sich nicht an die Standards halten :smile:

mfg
Klaus