# getElementsByName IE



## Divi (13. August 2004)

Hi Leute
Benutze in meinem Script folgenden Befehl:

document.getElementsByName("hintergruende").id

Dabei macht Mozilla auch brav mit, aber der IE weigert sich mal wieder - wenn ich allerdings nachschaue, was er sagt, wenn ich nur 

alert(document.getElementsByName("hintergruende")) 

mache, dann gibt er mir [Object] wieder - was wohl bedeutet, dass man schlichtweg nicht .id beim IE sagen kann - hat einer ne Idee, woran das liegen könnte?

Danke euch


----------



## Sven Mintel (13. August 2004)

Mit document.getElementsByName() erhältst du eine Auflistung *aller* Elemente mit diesem Namen.

Um ein Element mit der Methode anzusprechen, musst du noch angeben, das wievielte davon du meinst:

```
document.getElementsByName("hintergruende")[0]
```

...das ist auch notwendig, wenn es nur ein Element mit diesem Namen gibt.


.id kann man "sagen" ...aber eben nur, wenn ein spezielles Seitenelement angesprochen wird.....also mit der [0]...nur HTML-Elemente besitzen die Eigenschaft ID.


----------



## Divi (16. August 2004)

Richtig - genau so mache ich das aber auch - mein Problem ist schlichtweg, dass das bei meinen Tests nur in Firefox, Mozilla und NS funktioniert, aber nicht im IE - der spuckt einfach als gezählte Objekte "0" aus und meldet sogar einen Fehler, wenn ich getElementsByName("irgendwas").id da eingebe...

Genau aus diesem Grund hab ich nämlich nachgefragt, ob einer ne Idee hat, wie man das für den IE umgehen könnte...

Danke dir aber trotzdem...!


----------



## Sven Mintel (16. August 2004)

Zeig mal deinen kompletten Code....da muss was drinnen seine, was dem IE nicht passt....normalerweise kann er das.


----------



## Divi (16. August 2004)

```
function closeall() {  
  BGs = new Array();
  BGs = document.getElementsByName("hintergruende");
  for (i=(BGs.length-1); i>= 0; i--) {  
    t_currentObj = document.getElementsByName("hintergruende")[i].id;
    document.body.removeChild(document.getElementById(t_currentObj));
    dropped[t_currentObj.substring(0,(t_currentObj.length-2))] = false;  
  }  
}
```

Und das traurige daran ist, dass das ohne eine Beanstandung durch die Mozilla JS-Console läuft - aber einfach - und zwar ohne einen Fehler anzugeben - beim IE nicht ... das einzige, was darauf schließen lässt, dass der IE es nicht kann, ist die Tatsache, dass er bei BGs.length "0" ausspuckt und wenn man sich das ganze Teil hinter BGs= anzeigen lassen will kommt undefined raus - aber halt NUR BEIM IE...


----------



## Sven Mintel (16. August 2004)

Der IE kann das(ab V5.0)....ganz sicher.

..bei meinem IE macht das auch keine Probleme...
*Beispiel:*

```
<html>
<head>
<title>Test</title>
<script type="text/javascript">
<!--
function closeall()
{
  BGs = document.getElementsByName("hintergruende");
  alert('Zu Beginn enthält BGs '+BGs.length+' Elemente');
  for (i=(BGs.length-1); i>= 0; i--)
  {
    t_currentObj = document.getElementsByName("hintergruende")[i].id;
    alert('BGs['+i+'] hatte die ID "'+t_currentObj+'"\nund wird jetzt gelöscht');
    document.body.removeChild(document.getElementById(t_currentObj));
  }
  alert('Am Ende enthält BGs '+BGs.length+' Elemente');
}

//-->
</script>
</head>
<body>
<b onclick="closeall()">closeall()</b><br>
<a name="hintergruende"id="bla0">Hintergrund0</a><br>
<a name="hintergruende"id="bla1">Hintergrund1</a><br>
<a name="hintergruende"id="bla2">Hintergrund2</a><br>
<a name="hintergruende"id="bla3">Hintergrund3</a><br>
<a name="hintergruende"id="bla4">Hintergrund4</a><br>
</body>
</html>
```
Wenn du die Länge von BGs nach dem Löschen ermittelst, ist diese natürlich 0, denn
BGs==document.getElementsByName('hintergruende')...und da du alle diese Elemente gelöscht hast, ist der Array am Ende leer.

Wieauchimmer,...um der Sache auf die Spur zu kommen, poste mal das Ganze...incl. dem HTML ....


----------



## Quaese (16. August 2004)

Hi,

ich denke, dass im IE nur Elemente über die Methode *getElementsByName* und
somit mit ihrem Namen angesprochen werden könne,n die tatsächlich ein Name-Attribut
besitzen (z.B. A, IFRAME, FRAME, BUTTON).

Ersetze ich in fatalus' Beispiel die A-Tags durch DIVs, funktioniert es nicht mehr.

Ciao
Quaese


----------



## Sven Mintel (16. August 2004)

Falls es wirklich daran liegt, .....und die anderen Brauser das trotzdem machen....dann ein *HOCH* auf den IE....der machts dann als Einziger Richtig


----------



## Divi (17. August 2004)

Ich hab zum Testen noch den IE 5.00.3700.1000 drauf - und der macht das nicht - aber ich hab das Problem auch schon gelößt, denn ich bin via getElementsByTAGName alle DIVs durchgegangen und hab dann das NAME Attribute verglichen - funktioniert auch beim IE einwandfrei...


----------

