Alarska: Javascript: document.getElementsByName("content")[?]

Hi,

ich bräuchte Hilfe bei dem folgenden Problem:

wenn ich auf eine Tabellenzelle klicke, deren Name "content" ist, möchte ich gerne diesen Namen zurückbekommen, allerdings nicht alleine, sondern incl. des Index dieser Zelle... Also z.B. "content[3]" für die dritte Zelle mit dem Namen "content".

Ziel ist es, diese Zelle dann per

document.getElementsByName('content')[INDEX]

anzusprechen. Bisher habe ich

alert(this.getAttributeNode('name'));

probiert, aber das liefert mir nur den Namen, nicht den Index. Hatt da jemand eine Idee?

Danke schon mal!!

  1. alert(this.getAttributeNode('name'));

    Sorry, ich meinte natürlich

    alert(this.getAttribute('name'));

  2. Yerf!

    Ziel ist es, diese Zelle dann per

    document.getElementsByName('content')[INDEX]

    anzusprechen.

    Da Tabellenzellen in HTML keinen Namen haben dürfen wird dieses Vorhaben scheitern. (Das manche Browser trotzdem mitspielen ist eher Zufall)

    Bisher habe ich

    alert(this.getAttributeNode('name'));

    probiert, aber das liefert mir nur den Namen, nicht den Index. Hatt da jemand eine Idee?

    this ist doch schon die Referenz auf die gesuchte Tabellenzelle. Weshalb der Umweg über den Namen und getElementsByName um schlussendlich wieder genau dieselebe Referenz zu bekommen?

    Gruß,

    Harlequin

    --
    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
    1. Hey!

      Da Tabellenzellen in HTML keinen Namen haben dürfen wird dieses Vorhaben scheitern. (Das manche Browser trotzdem mitspielen ist eher Zufall)

      ich spreche die Zellen aber per

      var contents = new Array();  
      contents = document.getElementsByName("content");  
      for(var i=0; i<contents.length; i++)  
      {  
           contents[i].style.backgroundImage = "url(bild.gif)";  
      }
      

      an... und das geht ja per getElementById nicht!? Also müsste ich in jede Zelle erst noch einen <div> - Container einbauen, damit alles korrekt ist?

      this ist doch schon die Referenz auf die gesuchte Tabellenzelle. Weshalb der Umweg über den Namen und getElementsByName um schlussendlich wieder genau dieselebe Referenz zu bekommen?

      falls ich aber alert(this); schreibe, kommt zurück "[object HTML TableCellElement]", ganz egal wohin ich klicke :-(

      1. Yerf!

        an... und das geht ja per getElementById nicht!? Also müsste ich in jede Zelle erst noch einen <div> - Container einbauen, damit alles korrekt ist?

        Ein <div> hilft da auch nicht weiter, das Name-Attribut ist nur an Formularelementen erlaubt. Also entweder per fortlaufender ID (getElementById('content'+i)) oder einen anderen Weg suchen die Tabellenzellen anzusprechen (evtl. per getElementsByTagName, angewendet auf die Tabelle oder auch über die rows/cols-Collection der Tabelle).

        this ist doch schon die Referenz auf die gesuchte Tabellenzelle. Weshalb der Umweg über den Namen und getElementsByName um schlussendlich wieder genau dieselebe Referenz zu bekommen?

        falls ich aber alert(this); schreibe, kommt zurück "[object HTML TableCellElement]", ganz egal wohin ich klicke :-(

        alert(document.getElementsByName("content")[1]); liefert das gleiche...

        Wofür brauchst du die Referenz denn später, evtl. lässt sich das ganze dann leichter erklären.

        Gruß,

        Harlequin

        --
        <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
        1. Ein <div> hilft da auch nicht weiter, das Name-Attribut ist nur an Formularelementen erlaubt.

          Formularelemente wie a, img, object, map, param und meta (strikter Doctype) sowie applet, frame und iframe (andere Doctypes)?

          --
          Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
          Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|
          1. Ok, danke erstmal an euch alle, hat mir schon sehr weitergeholfen! Ich werd mal dran arbeiten und dann melde ich mich nochmal!

            Gruß
            Alex

      2. Mahlzeit Alarska,

        var contents = new Array();

        contents = document.getElementsByName("content");
        for(var i=0; i<contents.length; i++)
        {
             contents[i].style.backgroundImage = "url(bild.gif)";
        }

        
        >   
        > an... und das geht ja per getElementById nicht!? Also müsste ich in jede Zelle erst noch einen <div> - Container einbauen, damit alles korrekt ist?  
          
        Nein. Du willst offenbar HTML-Elemente, die kein "name"-Attribut haben (dürfen), in irgendeiner Form zusammenfassen - sie also <http://de.selfhtml.org/html/attribute/allgemeine.htm#uebersicht@title=klassifizieren>. Dann kannst Du ganz einfach in Javascript mittels <http://de.selfhtml.org/javascript/objekte/document.htm#get_elements_by_tag_name@title=getElementsByTagName> alle Tabellenzellen heraussuchen, überprüfen, ob sie der gewünschten Klasse angehören und dann das tun, was Du tun willst.  
          
          
        
        > > this ist doch schon die Referenz auf die gesuchte Tabellenzelle. Weshalb der Umweg über den Namen und getElementsByName um schlussendlich wieder genau dieselebe Referenz zu bekommen?  
        >   
        > falls ich aber `alert(this);`{:.language-javascript} schreibe, kommt zurück "[object HTML TableCellElement]", ganz egal wohin ich klicke :-(  
          
        Natürlich. Wie sollte ein Browser in einem Meldungsfenster sonst ein komplexes Objekt darstellen? Du weißt, was <http://de.selfhtml.org/javascript/sprache/objekte.htm#this@title=this> bedeutet?  
          
          
        MfG,  
        EKKi  
        
        -- 
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|