Tabellen-Zelle auslesen

  • JavaScript

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von slice.

    Tabellen-Zelle auslesen

    Hallo,
    aus einer HTML Tabelle möchte ich per JavaScript eine Zelle auslesen.
    So ist die Tabelle aufgebaut:

    Quellcode

    1. <table id="main">
    2. <tr class="main-header">
    3. <th id="main-number">Nr.</th>
    4. <th id="main-pilot">Pilot</th>
    5. <th id="main-passenger">Passagier</th>
    6. </tr>
    7. <tr class="main-flight-deactive" id="f1">
    8. <td id="main-flight-number">1</td>
    9. <td id="main-flight-pilot">Somewho Strange</td>
    10. <td id="main-flight-passenger">Somewho Strange</td>
    11. </tr>
    12. <tr class="main-flight-deactive" id="f2">
    13. <td id="main-flight-number">2</td>
    14. <td id="main-flight-pilot">Somewho Else</td>
    15. <td id="main-flight-passenger">Somewho Strange</td>
    16. </tr>
    17. </table>

    Und das ist mein bisheriger Versuch zum Auslesen einer Zelle:

    Quellcode

    1. document.getElementById("f" + "1").getElementById('main-flight-pilot').innerHTML()

    Naja, wäre auch zu schön gewesen, wenn das funktioniert hätte. Aber wie geht es richtig?

    MfG
    Marian
    versuch mal

    JavaScript-Quellcode

    1. alert(document.getElementById("f" + "1").innerHTML);


    du kannst jedes element mit einer id direkt ansprechen. aber wenn du die TD's ansprechen willst, solltest du ihnen eindeutige id's geben.
    die tr's brauchen keine id (denke nich dass du die iwie ansprechen willst) aber die td's kannst du zb so benennen:

    <tr>
    <td id="row1_col1"></td>
    <td id="row1_col2"></td>
    <td id="row1_col3"></td>
    </tr>
    <tr>
    <td id="row2_col1"></td>
    <td id="row2_col2"></td>
    <td id="row2_col3"></td>
    </tr>
    ... usw

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Agita“ ()

    Quellcode

    1. document.getElementById("main").children[0].children[1].children[1].innerHTML
    2. document.getElementById("main").children[0].children[2].children[1].innerHTML
    3. document.getElementById("main").children[0].children[ <- hier deine variable -> ].children[1].innerHTML

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „slice“ ()

    ids sind grundsätzlich dazu da um ein element einzigartig zu machen und es so einzelnd ansprechen zu können. mehrere elemente mit der gleichen id ist nicht der sinn der sache... wieso müssen die elemente die selbe id haben? wegen css? dafür gibts auch das attribute "class"

    schau mal bei google nach "html validator" und "css validator"
    @slice
    bei dem Code bekomme ich leider immer eine Fehlermeldung:
    TypeError: 'undefined' is not an object (evaluating 'document.getElementById("main").children[0].children[flugnummer].children')


    Quellcode

    1. document.getElementById("main").children[0].children[i].children[1].innerHTML

    Woran kann das liegen?
    Poste mal bitte den kompletten Code. Und den Post von @Agita: solltest du beherzigen, ändere jedes id innerhalb der table zu class, danach kannst du mit folgenden zugreifen

    HTML-Quellcode

    1. document.getElementById("main").getElementsByClassName("main-flight-pilot")[i].innerHTML

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „slice“ ()

    Betroffener Javascript-teil:

    Quellcode

    1. for (var i = 1; i <= flugnummer; i++) {
    2. outputHTML = outputHTML + '<tr class="main-body"><td id="main-body-number">'+ i +'</td><td id="main-body-pilot">' + document.getElementById("main").children[0].children[i].children[1].innerHTML + '</td><td id="main-body-passenger">Sven Scharr</td><td id="main-body-starttype">F</td><td id="main-body-airplane">ASK 21</td><td id="main-body-license">D-2631</td><td id="main-body-start">11:08</td><td id="main-body-landing">11:40</td><td id="main-body-duration">0:32</td><td id="main-body-trainingperformance">S</td><td id="main-body-notes"></td></tr>';
    3. outputHTML = outputHTML + '</table></body></html>';
    4. }

    Die Variable flugnummer ist 2, die Tabelle sieht testweise so aus, wie im Ausgangspostig erwähnt.

    Aber ok, ich sehe, dass das viel aufwändiger ist, als den Teil abzuändern, der für die IDs verantwortlich ist.
    Stimmt, es ist kein muss aber es kommt sehr stark darauf an was man vor hat. Nehmen wir an man hat zwei Tabellen und will nur in einer die 2. Column ändern (in beiden Tabellen wird Col2 mit der class "data-col2" versehen) dann ist es sinnvoll zuvor eine selektion der Daten vorzunehmen.

    Ja mit getElementById, aber da er mehrere Daten ansprechen möchte (die alle die class "main-flight-pilot" besitzen) kann er nicht mit getElementById arbeiten (siehe deinen zweiten Post :P)

    Achja und ja klar funktioniert das ;) jsbin.com/UWanOh/1/edit (quick'n'dirty)
    Ok, habe es jetzt mit einheitlichen IDs gelöst.
    Nächstes Problem:

    Quellcode

    1. var landingTime;
    2. for (var x = 1; x <= 5; x++) {
    3. if (landings[x].indexOf('f' + 1) != "-1") {
    4. landingTime = landings[x].substr(b.length + 2, 5);
    5. }
    6. }

    Der Array "landings" enthält mehrere Werte, die folgenderweise aufgebaut sind:

    Quellcode

    1. f1/08:50

    Quellcode

    1. f2/09:20

    Naja, die Fehlermeldung ist ebenfalls wieder sehr informativ...
    TypeError: 'undefined' is not a function (evaluating 'landings[x].indexOf('f' + i)')


    Auf jeden Fall funktioniert es nicht.
    du musst auch lernen wie man selber debuggen kann ;) versuch mal das hier:

    JavaScript-Quellcode

    1. //var landingTime;
    2. for (var x = 1; x <= 5; x++) {
    3. //if (landings[x].indexOf('f' + 1) != "-1") {
    4. // landingTime = landings[x].substr(b.length + 2, 5);
    5. //}
    6. alert(typeof landings[x]);
    7. }


    slice schrieb:

    Ja mit getElementById, aber da er mehrere Daten ansprechen möchte (die alle die class "main-flight-pilot" besitzen) kann er nicht mit getElementById arbeiten
    ID != Class
    aber ich weiß was du meinst ;) weil er keine eindeutigen ids benutzt
    Versuchs mal mit der "Konsole" im dem Plugin Firebug :) da kannst du relativ schnell sehen ob du auf dem richtigen "Weg" bzw. Element bist ^^
    Bilder
    • example.png

      66,23 kB, 1.003×804, 248 mal angesehen