Bernd Schiller: variable.document.getElementById

Hi,

ist es erlaubt document.getElementById innerhalb einer Variable anzuwenden? Im IE läuft das, aber im Firefox springt der Firefox-Debugger einfach an den Functionsaufruf und läuft weiter.

  
var fxt_id = 'fxt_' + item.fxt;  
var fxtcontainer = document.getElementById(fxt_id);  
var infobox = fxtcontainer.document.getElementById('info');  

Wie kann ich sonst gezielt anhand einer ID innerhalb des fxtcontainers suchen? document.getElementById funktioniert in diesem Fall nicht, weil sich diese ID mehrfach im Document befinden wird, aber nur einmal in dem div Container "fxtcontainer".

Ich weiß, dass macht man normalerweise nicht, aber in diesem Fall geht es nicht anders, da ich in eine html-Page mehrmals das gleiche Html in verschiedene div-Container reinlade.

Gruß
Bernd

  1. Hallo,

    ist es erlaubt document.getElementById innerhalb einer Variable anzuwenden?

    nein, schon die Formulierung ist Unsinn.

    var fxt_id = 'fxt_' + item.fxt;

    var fxtcontainer = document.getElementById(fxt_id);
    var infobox = fxtcontainer.document.getElementById('info');

      
    Wenn du schon die Code-Auszeichnung des Forums nutzt, dann markiere Javascript-Code bitte auch als Javascript, nicht als HTML. Danke.  
      
    Nach dem obigen Codeauszug ist fxtcontainer eine Referenz auf ein HTML-Elementobjekt innerhalb des Dokuments. Dieses Objekt hat aber keine Eigenschaft namens 'document'. Warum sollte es?  
      
    
    > Wie kann ich sonst gezielt anhand einer ID innerhalb des fxtcontainers suchen?  
      
    Das brauchst du nicht. Eine ID ist einzigartig im Dokument, kann also nur einmal vorkommen. Es ist daher nicht nötig, den Suchbereich einzuschränken.  
      
    
    > document.getElementById funktioniert in diesem Fall nicht, weil sich diese ID mehrfach im Document befinden wird, aber nur einmal in dem div Container "fxtcontainer".  
      
    Das ist ungültiges HTML. Vermeide das, oder lebe mit allen unvorhersehbaren Nebenwirkungen.  
      
    
    > Ich weiß, dass macht man normalerweise nicht, aber in diesem Fall geht es nicht anders, da ich in eine html-Page mehrmals das gleiche Html in verschiedene div-Container reinlade.  
      
    Dann lass das am besten. Das würde ja auch noch weitere Probleme nach sich ziehen - beispielsweise mehrere head- und body-Elemente im Dokument.  
    Wenn du schon ein komplettes HTML-Dokument einbinden willst, nimm ein iframe-Element. Dann sind die Dokumente organisatorisch getrennt.  
      
    Ciao,  
     Martin  
    
    -- 
    Die junge Ehefrau weint sich bei ihrer Mutter aus:  
    Er hat gesagt, ich soll mich zum Teufel scheren! - Und da kommst du ausgerechnet zu mir?!  
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    
    1. Hallo,

      ist es erlaubt document.getElementById innerhalb einer Variable anzuwenden?

      nein, schon die Formulierung ist Unsinn.

      var fxt_id = 'fxt_' + item.fxt;

      var fxtcontainer = document.getElementById(fxt_id);
      var infobox = fxtcontainer.document.getElementById('info');

      
      >   
      > Wenn du schon die Code-Auszeichnung des Forums nutzt, dann markiere Javascript-Code bitte auch als Javascript, nicht als HTML. Danke.  
        
      sorry hatte ich vertauscht.  
        
        
      
      > Das ist ungültiges HTML. Vermeide das, oder lebe mit allen unvorhersehbaren Nebenwirkungen.  
        
      Konnte es anders lösen, so dass ich direkt über das document.getElementById auf das Element zugreifen kann. Welche Nebenwirkungen entstehen denn bei einem HTML-File, wenn eine ID mehrfach vorkommt? Solange diese von der Programmierung (Javascript etc.) nicht angefasst werden.  
        
        
      
      > Dann lass das am besten. Das würde ja auch noch weitere Probleme nach sich ziehen - beispielsweise mehrere head- und body-Elemente im Dokument.  
      > Wenn du schon ein komplettes HTML-Dokument einbinden willst, nimm ein iframe-Element. Dann sind die Dokumente organisatorisch getrennt.  
      >   
      
      hier hatte ich mich etwas undeutlich ausgedrückt. Ich lade nicht den HTML-Header in einen div Container, sondern nur den <body>-Inhalt mittels  
      window.XMLHttpRequest  
        
      Gruß  
      Bernd
      
      1. Hi,

        Welche Nebenwirkungen entstehen denn bei einem HTML-File, wenn eine ID mehrfach vorkommt? Solange diese von der Programmierung (Javascript etc.) nicht angefasst werden.

        Javascript-Operationen, die sich an einer ID orientieren, sind dann natürlich offensichtliche Problemkandidaten. Aber auch die Angabe eines Sprungziels in der Form http://example.org/foo.html#anchor kann nur dann richtig funktionieren, wenn das Sprungziel (also die ID) eindeutig ist.
        Davon abgesehen ist es IMO tatsächlich "nur" ein formaler Fehler - zumindest fallen mir im Moment keine weiteren Auswirkungen ein.

        So long,
         Martin

        --
        Wenn man keine Ahnung hat - einfach mal Fresse halten.
          (Dieter Nuhr, deutscher Kabarettist)
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      2. [latex]Mae  govannen![/latex]

        Welche Nebenwirkungen entstehen denn bei einem HTML-File, wenn eine ID mehrfach vorkommt? Solange diese von der Programmierung (Javascript etc.) nicht angefasst werden.

        Die meisten Browser sind tolerant und stellen trotzdem alles wie gewünscht dar. Problematisch wird es, wie Martin schon sagte, bei IDs als Sprungmarken. Hier wird es vermutlich nicht möglich sein, die zweite/dritte/... Position anzuspringen, allerdings habe ich das auch noch nie wirklich in diversen Browsern getestet.

        Problematisch ist in jedem Fall Javascript, da das Verhalten von document.getElementById nicht definiert ist, wenn mehrere gleiche IDs vergeben wurden. Die Browser sind hier in der Regel durchgehend so „tolerant“, in einem solchen Fall die Referenz auf das _erste_ Element mit der entsprechenden ID zurückzugeben, aber genauso „richtig“ wäre es, wenn document.getElementById hier gar keine Referenz zurückgeben würde, was dann zum Fehlschlagen des Scriptes führen würde.

        Aber das macht man™ ja ohnehin nicht und vergibt jede ID nur einmalig ;)

        Stur lächeln und winken, Männer!
        Kai

        --
        „Die Borg würden nicht mal Spaß verstehen, wenn sie einen Vergnügungspark assimiliert hätten!” (B'Elanna Torres)
        SelfHTML-Forum-Stylesheet