Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

getElementsByName und der IE

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 02.07.2011, 09:12

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 :-(

Anzeige von ABAKUS

von Anzeige von ABAKUS »


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

chris21
PostRank 9
PostRank 9
Beiträge: 2758
Registriert: 10.04.2005, 18:17

Beitrag von chris21 » 02.07.2011, 10:00

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.

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 02.07.2011, 10:22

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.

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


chris21
PostRank 9
PostRank 9
Beiträge: 2758
Registriert: 10.04.2005, 18:17

Beitrag von chris21 » 02.07.2011, 10:27

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.

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 02.07.2011, 10:54

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&#40;"div"&#41;;
var divsLength = divs.length;

for &#40;var i=0; i<divsLength; i++&#41;
&#123;
	var div = divs&#91;i&#93;;

	// Suche alle DIVs mit '/dummy-root/' in der ID
	if &#40;div.id.search&#40;/dummy-root/&#41; != -1&#41;
	&#123;
		// hier der bisherige Code
	&#125;
&#125;
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.

chris21
PostRank 9
PostRank 9
Beiträge: 2758
Registriert: 10.04.2005, 18:17

Beitrag von chris21 » 02.07.2011, 11:07

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".

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 02.07.2011, 11:20

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!

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 02.07.2011, 11:38

ok, etwas umgebaut, aber so geht es auch:

Code: Alles auswählen

var divs = document.getElementsByName&#40;'dummy-root'&#41;;
var divsLength = divs.length;

for &#40;var i=0; i<divsLength; i++&#41;
&#123;
	var div = divs&#91;i&#93;.parentNode;
	
	// hier der bisherige Code
&#125;
Und der Platzhalter dann:

Code: Alles auswählen

<div><a name="dummy-root" rel="box_count"></a></div>

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 02.07.2011, 13:02

Also die Version von Dir ist die schnellere :-)

3.2 ms

Meine braucht 4.3 ms

chris21
PostRank 9
PostRank 9
Beiträge: 2758
Registriert: 10.04.2005, 18:17

Beitrag von chris21 » 02.07.2011, 13:51

:)

nerd
PostRank 10
PostRank 10
Beiträge: 4023
Registriert: 15.02.2005, 04:02

Beitrag von nerd » 03.07.2011, 00:20

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.

Antworten