Margin-Auto: Im IE auf Tag-Liste zugreifen

Hi,

ich habe mir eine Funktion gebastelt, die alle Tags (also Nodes) eines bestimmten Typs aus einem Dokument rauslöscht, damit sie anschließend via AJAX neu geladen werden können. (Optional ist noch eine weitere Einschränkung über das Class-Attribut möglich)

  
function deleteTags(tagname, cssClass){  
 var tags=document.getElementsByTagName(tagname);  
 var len=tags.length;  
  
 for (var i=len-1; i>=0; i--){  
  var element=tags[i];  
  if ( (element.getAttribute('class') == cssClass) || (!cssClass) ){  
   element.parentNode.removeChild(element);  
  }  
 }  
}  

In Seamonkey funktioniert auch alles wie gewünscht, nur im IE kann ich nicht auf die Elemente des Arrays tags zugreifen. len hat den erwarteten Wert, aber die Zuweisung element=tags[i] liefert offenbar nichts zurück.

Erwähnen sollte ich vielleicht noch, dass die ganze Handlung in einem SVG-Dokument spielt, d.h. im IE kommt der Adobe-Viewer zum Einsatz. Glaube aber nicht, dass das relevant ist, da der ja auf die JS-Engine vom IE zurückgreift (oder?).

Wie kriege ich hin, dass das auch im IE läuft?

TIA

Margin-Auto

  1. Hallo Margin-Auto,

    if ( (element.getAttribute('class') == cssClass) || (

    versuche hier mal element.className. Sonst leg ein alert in den IF-Block.

    Gruß, Jürgen

    1. Hi,

      versuche hier mal element.className. Sonst leg ein alert in den IF-Block.

      Danke für den Tipp, aber "className ist Null oder kein Objekt".
      Die gleiche Fehlermeldung bekomme ich auch, wenn ich vor dem If-Block mir die ID des Elements anzeigen lassen will, was im Gecko jedoch funktioniert.

      Margin-Auto

      1. Hallo Margin-Auto,

        Danke für den Tipp, aber "className ist Null oder kein Objekt".
        Die gleiche Fehlermeldung bekomme ich auch, wenn ich vor dem If-Block mir die ID des Elements anzeigen lassen will, was im Gecko jedoch funktioniert.

        dann weiß ich auch nicht mehr weiter. Genau so greife ich auf Elemente einer vorgegebenen Klasse zu. Statt "==" benutze ich nur indexOf:

        if(element.className.indexOf(cssClass)>-1)

        da das Element ja in mehreren Klassen sein kann.

        Vieleicht ist es ja doch ein SVG/IE-Problem? Davon habe ich aber keine Ahnung.

        Gruß, Jürgen

        1. hi,

          Off-Topic:

          Genau so greife ich auf Elemente einer vorgegebenen Klasse zu. Statt "==" benutze ich nur indexOf:
            if(element.className.indexOf(cssClass)>-1)
          da das Element ja in mehreren Klassen sein kann.

          Damit findest du auch ein Element, welches die Klasse "abcdef" hat, wenn du bspw. nach Elementen mit der Klasse "abc", "cde" oder "def" suchst.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. Hallo wahsaga,

            Damit findest du auch ein Element, welches die Klasse "abcdef" hat, wenn du bspw. nach Elementen mit der Klasse "abc", "cde" oder "def" suchst.

            stimmt. Aber da ich "ordentliche" Klassennamen benutze, kommt das "nie" vor.

            Eine Idee zu Margin-Autos Problem?

            @Margin-Auto Vieleicht solltest Du mal eine kleine Testseite erstellen, die "nur" den Fehler enthält, ohne das SVG- und AJAX-Zeugs, und diese dann hier verlinken.

            Gruß, Jürgen

        2. Hi,

          Vieleicht ist es ja doch ein SVG/IE-Problem? Davon habe ich aber keine Ahnung.

          Scheint tatsächlich so zu sein. Ich habe gerade die Funktion in eine (X)HTML-Testseite eingebaut und da funktioniert es problemlos.
          Kennt sich vielleicht einer von den SVG-Cracks mit dem Problem aus?

          TIA

          Margin-Auto

        3. Hi,

          dann weiß ich auch nicht mehr weiter. Genau so greife ich auf Elemente einer vorgegebenen Klasse zu. Statt "==" benutze ich nur indexOf:

          if(element.className.indexOf(cssClass)>-1)

          da das Element ja in mehreren Klassen sein kann.

          ist aber auch falsch. Beispiel: Suche nach Klasse "bla". class="blablubb".

          Vorne und hinten ans className-Attribut ein Leerzeichen hängen, alle Whitespaces in className auf Leerzeichen ändern, dann Suche nach Leerzeichen + Klasse + Leerzeichen.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          O o ostern ...
          Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Hallo MudGuard,

            Danke für den Tipp. Aber wie ich schon wahsaga geantwortet habe, funktioniert es bei mir, da ich die Klassennamen kenne und unter Kontrolle habe. Eine "narrensichere" Lösung müsste warsheinlich mit RegExp arbeiten. Das Problem von Margin-Auto liegt ja auch gar nicht am Klassenzugriff, sondern am SVG.

            Gruß, Jürgen

  2. Tach Margin-Auto,

    Erwähnen sollte ich vielleicht noch, dass die ganze Handlung in einem SVG-Dokument spielt, d.h. im IE kommt der Adobe-Viewer zum Einsatz.

    Der ASV sollte bei Verwendung von element=tags.item(i); statt element=tags[i]; den Code ausführen (andere Browser verstehen die DOM-Methode item() auch).

    Die Eigenschaft className kennt der ASV zwar nicht, aber die alternative Ansprache des class-Attributes funktioniert.

    Man liest sich,
    svg4you

    1. Hi,

      Der ASV sollte bei Verwendung von element=tags.item(i); statt element=tags[i]; den Code ausführen (andere Browser verstehen die DOM-Methode item() auch).

      Vielen Dank, damit läuft es jetzt!
      Danke auch an die anderen für die Hinweise zu dem Vergleich der Klassen. Werde bei Gelegenheit daran denken, wenn das mit den Klassen komplexer wird in meinem Projekt.

      Margin-Auto