Seite 1 von 1
getElementsByName und der IE
Verfasst: 02.07.2011, 09:12
von Synonym
Hallo zusammen,
wahrscheinlich eine kleine Sache, aber ich finde seit gestern keine Lösung.
Folgendes:
In einem Dokument habe ich 2 mal folgendes stehen:
<div name="dummy-root"></div>
Per JavaScript kommt nun ein:
var dummies = document.getElementsByName('dummy-root');
alert(dummies.length);
So, der FF meldet schön brav "2". Der IE8 meldet jedoch "0".
Warum? Kann mir das einer erklären? Es ist doch ein so einfacher Code... Ich komme nicht weiter

Verfasst:
von
Hochwertiger Linkaufbau bei ABAKUS:
- Google-konformer Linkaufbau
- nachhaltiges Ranking
- Linkbuilding Angebote zu fairen Preisen
- internationale Backlinks
Wir bieten
Beratung und
Umsetzung.
Jetzt anfragen:
0511 / 300325-0
Verfasst: 02.07.2011, 10:00
von chris21
Problem ist vll., dass ein div kein Namensattribut kennt. MSDN behauptet zwar, auch auf name Attribute nicht unterstützter Tags zuzugreifen, aber vll. stimmt das nicht.
Tante Edith sagt:
ja, wenn man sich mal Forenthreads dazu anschaut, der IE unterstützt das name-Tag beim div nicht, daher liefert er 0.
Verfasst: 02.07.2011, 10:22
von Synonym
Hi Chris,
ja, soweit bin ich eben auch gekommen. Lese hier schon Google hoch und runter.... Aber wie macht man das denn dann? Geht hier speziell im einen FB-Button und dort gibt es ja auch ein <div name="fb-root"></div>. Meiner ist für mein Script ein Dummy, der dann erst den Rest einfügt.
FB selbst arbeitet dann ja aber auch damit.
Wegen mir kann ich das auch anders machen, nur wie?
Ich brauche quasi mehrere "Platzhalter" im Dokument, die dann per JS angesprochen werden. Die Dinger mit "id" zu versehen geht nicht, da die Anzahl unterschiedlich ist.
Das andere wäre direkt auf die DIV zuzugreifen und dann das Element "name" zu vergleichen. Aber das finde ich etwas heftig. Fast hundert DIVs "abklappern" um dann 1-3 von den gewünschten zu finden.
Und etwas wie "alle id mit "dummy_x" gibt es ja auch nicht, also variable IDs mit einer Duschnummerierung.
Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
Verfasst: 02.07.2011, 10:27
von chris21
beispiel wäre, in alle platzhalter div ein leeres a mit name=dummy reinzupacken.
Dann die a's über getElementsByName suchen und jeweils auf parent gehen.
Nur als erste quick fix idee.
Verfasst: 02.07.2011, 10:54
von Synonym
Ok, Ckris, das ist dann aber auch wieder eine "über alles Laufen" und As habe ich noch mehr als DIVs
Hab es jetzt mal so gemacht wie Du sagtest, aber eben über die DIVs und nicht die Links
Code: Alles auswählen
var divs = document.getElementsByTagName("div");
var divsLength = divs.length;
for (var i=0; i<divsLength; i++)
{
var div = divs[i];
// Suche alle DIVs mit '/dummy-root/' in der ID
if (div.id.search(/dummy-root/) != -1)
{
// hier der bisherige Code
}
}
So scheint es zu funktionieren.
Und eine Anmeldung noch. Mit dem "getElementsByName" geht es auch im IE mit DIVs, wenn es nur EINES gibt. Bei zwei oder mehr kommt als Anzahl immer 0, gibt es eines, dann stimmt der Wert.
Verfasst: 02.07.2011, 11:07
von chris21
Hi Ingo,
ich meinte es anders:
var dummies=getElementsByName('dummy').parentNode;
und in der Seite jeweils:
<div><a name="dummy"></a></div>
Das Name Attribut ist beim a Tag korrekt. Daher findet der IE dann auch alle a Tags mit name="dummy".
Verfasst: 02.07.2011, 11:20
von Synonym
Ach so... Ich dachte alle A suchen und dann nur die mit "name" nehmen. Muss ich mal testen... Ich suche da nämlich die schnellste Variante
Wobei das "name" im A in den neuer Doctypes aber auch nicht mehr erlaubt ist, dort ist es dann wieder ID.
Werde es aber mal testen. Hätte noch den Vorteil, dass ich "Parameter" per rel="" setzen kann. Das mache ich momentan per Umweg über class=""
danke Dir!
Verfasst: 02.07.2011, 11:38
von Synonym
ok, etwas umgebaut, aber so geht es auch:
Code: Alles auswählen
var divs = document.getElementsByName('dummy-root');
var divsLength = divs.length;
for (var i=0; i<divsLength; i++)
{
var div = divs[i].parentNode;
// hier der bisherige Code
}
Und der Platzhalter dann:
Verfasst: 02.07.2011, 13:02
von Synonym
Also die Version von Dir ist die schnellere
3.2 ms
Meine braucht 4.3 ms
Verfasst: 02.07.2011, 13:51
von chris21
Verfasst: 03.07.2011, 00:20
von nerd
habt ihrs inzwischen rausbekommen? ansonsten jQuery, damit geht sowas immer ganz gut, und auch browser unabhaengig. Wuerde version 1.3.2 empfehlen, wenn du auf die auf google apis gehostete version zugreifst dann ist das bei den meisten usern auch schon im cache und muss nicht erst extra nachgeladen werden.