waste: selectfeld innerhalb bestimmter Tabelle ansprechen

Hallo,

ich möchte gerne ein select-Feld ändern, das sich in einer bestimmten Tabelle innerhalb eines Form-Tags befindet.

Ich habe ein Form-Tag.
In diesem befinden sich 3 Tabellen.
In den Tabellen wiederum befinden sich input- und select-Tags.
Mich interessieren aber nur die selects.

Ich würde nun gerne, auf die select-Tags der 2. Tabelle Zugriff haben.
Konkreter möchte ich in allen select-Tags der 2. Tabelle eine bestimmte Auswahl einstellen.
Ich kann momentan für _alle_ slelects innerhalb des Form-Tags die Werte ändern, aber nicht nur explizit für die der 2. Tabelle.

Um die Sache etwas zu verkomplizieren ...
Die genaue Anzahl der Select-Tags ist im Vorherein nicht bekannt.
Sie liegt je nach Anwendung zwischen 0 und 20 und kann für alle Tabellen verschieden sein.

Wenn ihr da eine Anregung habt, würde ich mich sehr freuen.
Danke schonmal
waste

Grobe Übersicht:
kein korrektes HTML, sondern nur zur Übersicht, damit ihr wisst, was ich meine.

<form>

<table>
 <tr>
  <td>

<select>  so lassen wie es ist
    <option>
    <option>
   <select>

</td>
 </tr>
</table>

<table>
 <tr>
  <td>

<select>  ÄNDERN!!!
    <option>
    <option>
   <select>

<select>  ÄNDERN!!!
    <option>
    <option>
   <select>

</td>
 </tr>
</table>

<table>
 <tr>
  <td>

<select>  so lassen wie es ist
    <option>
    <option>
   <select>

</td>
 </tr>
</table>

</form>

  1. Hi waste!

    Ich habe deinem Beispielcode ein paar Namen verpasst:

    <form name='formular'>

    <table>
    <tr>
      <td>

    <select>  so lassen wie es ist
        <option>
        <option>
       <select>

    </td>
    </tr>
    </table>

    <table>
    <tr>
      <td>

    <select name='select_in_zweiter_tabelle'>  ÄNDERN!!!
        <option>
        <option>
       <select>

    <select name='select_in_zweiter_tabelle'>  ÄNDERN!!!
        <option>
        <option>
       <select>

    </td>
    </tr>
    </table>

    <table>
    <tr>
      <td>

    <select>  so lassen wie es ist
        <option>
        <option>
       <select>

    </td>
    </tr>
    </table>

    </form>

    Einach gesagt, kannst du mit document.formular.select_in_zweiter_tabelle.value den Wert vergeben, den du möchtest. Du sprichst damit alle <select>s innerhalb der zweiten Tabelle an. Natürlich müssen die Elemente entsprechende Namen tragen. Da das Attribut "name" allerdings keinen dokumentweit eindeutigen Wert haben muss, kannst du mehreren <select>s den gleichen Namen geben.

    Eine andere Möglichkeit wäre die Adressierung mit DOM:
    document.getElementsByName("form")[0].getElementsByName("table")[1].getElementsByName("select")[n].value = "wert" würde dem n-ten <select> in der zweiten Tabelle ([0],[1] >> Zählweise beginnt bei 0) im ersten Formular den Wert "wert" zuweisen. Du müsstest in diesem Fall allerdings mit JavaScript durch alle <select>s iterieren (n = 0..x).

    Zur Veranschaulichung eines kleines Test-Dokument:

    <html>
    <head></head>
    <body>
     <span>
      <form>
       <input type='text' value='hallo1'>
       <input type='text' value='hallo2'>
      </form>
      <form>
       <input type='text' value='hallo3'>
       <input type='text' value='hallo4'>
      </form>
     </span>
     <span>
      <form>
       <input type='text' value='hallo5'>
       <input type='text' value='hallo6'>
      </form>
      <form>
       <input type='text' value='hallo7'>
       <input type='text' value='hallo8'>
      </form>
     </span>

    <script language='javascript'>
     <!--
      alert(document.getElementsByTagName("span")[1].getElementsByTagName("form")[0].getElementsByTagName("input")[1].value);
     -->
     </script>
    </body>
    </html>

    Die Ausgabe des Skripts per alert() wird "hallo6" lauten, da es sich um den Wert des zweiten <input>s im ersten <form> des zweiten <span>s handelt.

    Viele Grüße,
    Tobias

    1. Kleine Korrektur meiner Erläuterung!

      Eine andere Möglichkeit wäre die Adressierung mit DOM:
      document.getElementsByName("form")[0].getElementsByName("table")[1].getElementsByName("select")[n].value = "wert" würde dem n-ten <select> in der zweiten Tabelle ([0],[1] >> Zählweise beginnt bei 0) im ersten Formular den Wert "wert" zuweisen.

      Statt getElementsByName muss es natürlich getElementsByTagName heißen. Im meinem nachfolgenden Beispiel habe ich bereits den richtigen Befehl verwendet.

      Viele Grüße,
      Tobias