getElementsByTagName nur auf bestimmtes elternelement anwenden
oleeeeeee
- javascript
hallo ich habe eine funktion geschrieben. es ändert alle links in meinem dokument:
function aendereLinks() {
var links = document.getElementsByTagName("a");
for (var i = 0; i < links.length; ++i)
{
//ändere die links
}
}
ich würde an die funktion gerne ein element übergeben in dem die ändereung durchgeführt wird also:
function aendereLinks("vater"){}
<a>dieser link wird nicht geändert</a>
<div id="vater">
<a>dieser link wird geändert</a>
<a>dieser link wird geändert</a>
<a>dieser link wird geändert</a>
</div>
<a>dieser link wird nicht geändert</a>
wie kann ich dem script sagen das nicht alle a elemente des dokuments gezählt werden sollen sondern nur jene die sich in einem bestimmten elternelement befinden?
entschuldigt, ich hab die Antwort gerade selbst gefunden:
var links = document.getElementById("vater").getElementsByTagName("a");
entschuldigt, ich hab die Antwort gerade selbst gefunden:
var links = document.getElementById("vater").getElementsByTagName("a");
links ist reserviert für die links-collection. Nimm besser einen anderen Bezeichner
Moin.
links ist reserviert für die links-collection. Nimm besser einen anderen Bezeichner
Wieso? 'links' ist weder ein reserviertes Wort noch eine Eigenschaft von window. Wieso sollte man keine Variablennamen verwenden, die (zufällig) mit Eigenschaften von document übereinstimmen?
Christoph
links ist reserviert für die links-collection. Nimm besser einen anderen Bezeichner
Wieso?
Um Chaos zu vermeiden, gerade wenn die Variable "links" den gleichen Inhalt hat wie die links-collection. Jemand, der diesen Code liest, kann da möglicherweise ins Rudern kommen. Spielt zwar im vorlieghenden Fall vmtl. keine Rolle, ist aber guter Programmierstil, Namen vordefinierter Objekte nicht als eigene Variablennamen zu verwednen.
'links' ist weder ein reserviertes Wort noch eine Eigenschaft von window.
Habe ich auch nicht behauptet.
Wieso sollte man keine Variablennamen verwenden, die (zufällig) mit Eigenschaften von document übereinstimmen?
Um Missverständnisse zu vermeidne. Um`s mit PHP zu sagen: meien Bemerkung war eine notice, kein parse error.
~JJ
@@oleeeeeee:
wie kann ich dem script sagen das nicht alle a elemente des dokuments gezählt werden sollen sondern nur jene die sich in einem bestimmten elternelement befinden?
Indem du die Methode 'getElementsByTagName("a")' nicht auf das Objekt 'document', sondern auf 'document.getElementById("vater")' anwendest.
Live long and prosper,
Gunnar
mir ist glaube ich garade die innere Logik dieser Sprache klar geworden^^
Hallo oleee!
document.getElementById("vater")
mir ist glaube ich garade die innere Logik dieser Sprache klar geworden^^
Noch nicht ganz ;-) Es muss heißen:
document.getElementById("vorfahre")
Gruß Uwe
wie kann ich dem script sagen das nicht alle a elemente des dokuments gezählt werden sollen sondern nur jene die sich in einem bestimmten elternelement befinden?
var alleLinks = document.getElementById('foo').getElementsByTagName('a')
~JJ
Liebe(r) oleeeeeee,
wenn man alle Antworten zusammenfasst, müsste diese Funktion dabei herauskommen:
function aendereLinks() {
var vater = document.getElementsByTagName("body")[0]; // default
// Wurde die Funktion mit Parameter aufgerufen und ein element übergeben?
if (arguments.length > 0) {
// Ja, dieses anstatt des bodys benutzen!
if (arguments[0])
vater = arguments[0];
}
var aElemente = vater.getElementsByTagName("a");
for (var i = 0; i < aElemente.length; i++) { // Dein altes "++i" war falsch!
//ändere die links
}
}
Liebe Grüße aus Ellwangen,
Felix Riesterer.
@@Felix Riesterer:
var vater = document.getElementsByTagName("body")[0]; // default
?? 'document.body' existiert.
for (var i = 0; i < aElemente.length; i++) { // Dein altes "++i" war falsch!
Nein, das ist an der Stelle egal.
Live long and prosper,
Gunnar
wenn man alle Antworten zusammenfasst, müsste diese Funktion dabei herauskommen:
function aendereLinks() {
var vater = document.getElementsByTagName("body")[0]; // default
// Wurde die Funktion mit Parameter aufgerufen und ein element übergeben?
if (arguments.length > 0) {
// Ja, dieses anstatt des bodys benutzen!
if (arguments[0])
vater = arguments[0];
}
oder eleganter:
[code lang=javascript]var vater = arguments.length ? arguments[0] : documemt.body;
> var aElemente = vater.getElementsByTagName("a");
> for (var i = 0; i < aElemente.length; i++) { // Dein altes "++i" war falsch!
Falsch, ich verwende zwar auch meistens i++, aber ++i ist von der Performance besser, da dieser Operator keine Kopie von i anlegen muss.
Struppi.
Hallo Struppi!
oder eleganter:
var vater = arguments.length ? arguments[0] : documemt.body;
Oder noch ein Tick eleganter :-)
var vorfahre = arguments[0] || document.body;
Gruß Uwe
ich habe jetzt einfach mal:
if ( typeof(eltern) != "undefined" ) {
document.getElementById(eltern).getElementsByTagName("a");
}
else
{
document.getElementsByTagName("a");
}
funktionier auch. is das auch ok?
Moin.
ich habe jetzt einfach mal:
if ( typeof(eltern) != "undefined" ) {
document.getElementById(eltern).getElementsByTagName("a");
}
else
{
document.getElementsByTagName("a");
}funktionier auch. is das auch ok?
Also _so_ funktioniert das vermutlich nicht - irgendwo solltest du das Ergebnis von getElementsByTagName() ja auch zwischenspeichern...
Ansonsten willst du deiner Funktion also die Id eines Elements übergeben - die anderen Vorschläge sind von einer Element-Referenz ausgegangen.
Mit verwirrender (äh - elegant - ich meinte elegant ;)) Kurzschreibweise würde das z.B. so aussehen:
function aendereLinks(elterId) {
var elter = elterId && document.getElementById(elterId);
var links = (elter || document.body).getElementsByTagName('a');
for (var i = 0; i < links.length; ++i) {
// mach was
}
}
Christoph