[Safari]Javascript: HTML-Objekt durch "name"-Attribut ansprechen
Benjamin
- browser
Hallo ihrs.
Ich hab da also folgende Tabelle:
<table id="Chat">
<tr>
<td name="beitrag1"></td>
</tr>
<tr>
<td name="beitrag2"></td>
</tr>
</table>
Wenn ich jetzt beispielsweise auf die zweite Zelle zugreifen möchte gehe ich wie folgt vor:
document.getElementById("Chat").getElementsByTagName("td").beitrag2
Das funktioniert im IE sowie im FF einwandfrei. Lediglich der Safari macht Probleme. Kann es sein, dass es mit dem Safari nicht möglich ist per "name"-Attribut von HTML-Objekten auf eben diese HTML-Objelte zuzugreifen?
Würde mich über eine Antwort freuen und bedanke mich schonmal im Vorraus.
mfg
benjamin
Hi,
<td name="beitrag2"></td>
Wenn ich jetzt beispielsweise auf die zweite Zelle zugreifen möchte gehe ich wie folgt vor:
document.getElementById("Chat").getElementsByTagName("td").beitrag2
Das funktioniert im IE sowie im FF einwandfrei.
Schoener Zufall.
Lediglich der Safari macht Probleme. Kann es sein, dass es mit dem Safari nicht möglich ist per "name"-Attribut von HTML-Objekten auf eben diese HTML-Objelte zuzugreifen?
Doch - bei Elementen, fuer die in HTML ein name-Attribut definiert ist. Nein, Tabellenzellen gehoeren nicht zu diesen.
MfG ChrisB
Hi,
<td name="beitrag2"></td>
Wenn ich jetzt beispielsweise auf die zweite Zelle zugreifen möchte gehe ich wie folgt vor:
document.getElementById("Chat").getElementsByTagName("td").beitrag2
Das funktioniert im IE sowie im FF einwandfrei.
Schoener Zufall.
Lediglich der Safari macht Probleme. Kann es sein, dass es mit dem Safari nicht möglich ist per "name"-Attribut von HTML-Objekten auf eben diese HTML-Objelte zuzugreifen?
Doch - bei Elementen, fuer die in HTML ein name-Attribut definiert ist. Nein, Tabellenzellen gehoeren nicht zu diesen.
MfG ChrisB
Vielen Dank, das hilft mir weiter. ;)
Wenn ich jetzt beispielsweise auf die zweite Zelle zugreifen möchte gehe ich wie folgt vor:
document.getElementById("Chat").getElementsByTagName("td").beitrag2
Ich bin erschüttert, das geht wirklich, aber warum???
Struppi.
Yerf!
Ich bin erschüttert, das geht wirklich, aber warum???
Vermutlich weil sich JavaScript nicht um irgendwelche HTML-Regeln kümmert...
Gruß,
Harlequin
Hallo,
Ich bin erschüttert, das geht wirklich, aber warum???
getElementsByTagName gibt im Firefox eine HTMLCollection. Das ist nicht ganz DOM-Core-konform, demgemäß müsste es eine NodeList sein.
HTMLCollections haben jedenfalls die Methode namedIndex.
nodelist["str"] ist im ECMAScript-Binding von DOM Core auf nodelist.namedIndex("str") gelegt.
nodeIndex sucht erst nach Elementen mit einem entsprechenden id-Attribut, dann nach Elementen mit entsprechendem name-Attribut.
Aus DOM-Sicht geht .getElementsByTagName("td").beitrag2 aus demselben Grund wie document.forms.bla bzw. document.forms.bla.elements.bla mit name-Attributen funktioniert, weil forms und elements auch HTMLCollections sind.
Mathias
Aus DOM-Sicht geht .getElementsByTagName("td").beitrag2 aus demselben Grund wie document.forms.bla bzw. document.forms.bla.elements.bla mit name-Attributen funktioniert, weil forms und elements auch HTMLCollections sind.
OK, die Erklärung leuchtet ein, aber ist alles andere als logisch, weil nämlich umgekehrt:
var x = document.getElementById("Chat").getElementsByTagName("td").beitrag1;
alert(x.name);
Der Name gar nicht existiert und wenn ich das hier richtig verstehe:
namedItem
This method retrieves a Node using a name. With [HTML 4.01] documents, it first searches for a Node with a matching id attribute. If it doesn't find one, it then searches for a Node with a matching name attribute, but only on those elements that are allowed a name attribute. With [XHTML 1.0] documents, this method only searches for Nodes with a matching id attribute. ...
dann dürfte es auch nicht funktionieren.
Struppi.
Hallo,
alert(x.name);
alert(x.getAttribute("name"));
;-P
it then searches for a Node with a matching name attribute, but only on those elements that are allowed a name attribute
Oh, ja, das wird natürlich auch ignoriert...
Mathias
Hallo,
Das funktioniert im IE sowie im FF einwandfrei.
Das ist in gleich zweifacher Hinsicht nicht standardkonform:
getElementsByTagName gibt gemäß W3C DOM Core eine NodeList zurück, in diesen Browsern ist es aber eine HTMLCollection (siehe mein anderes Posting). Der Unterschied ist, dass eine Ansprechweise über id- bzw. name-Attribut wie diese bei NodeLists eigentlich nicht möglich ist.
Dann gibt es wie gesagt gar keine name-Attribute bei td-Elementen. Die könntest du natürlich durch id-Attribute ersetzen, wodurch der HTML-Code standardkonform wäre. Aber das würde nicht ändern, dass getElementsByTagName("td").beitrag2 hochgradig proprietär ist und es daher nicht alle Browser können.
Überhaupt verstehe ich das Problem nicht ganz. Wozu brauchst du die Nummerierung beitrag1, beitrag2 usw.? Du kannst auf die td-Elemente auch anders zugreifen:
var table = document.getElementById("Chat");
table.rows[0].cells[0] // erste Zeile, erste Zelle
table.rows[1].cells[0] // zweite Zeile, erste Zelle
// usw.
Mathias