Cl: Spezifischen HTML-Tag mit Attributen und Inhalt ersetzen

Guten Tag,

ich bin gerade am verzweifeln. Ich versuche jetzt schon seit mindestens 2 Stunden ein relativ einfach scheinendes Problem zu lösen. Ausgangssituation ist ein HTML-Code, der wiederum mehrere <table>-Tags enthält, die sowohl (variable) Attribute als auch (variable) Kindelemente haben. Mit JavaScript und RegExp versuche ich nun diese aus dem Code zu entfernen. So habe ich zum Beispiel folgenden HTML-Code:
<table class="cell" style="width:100%; border-spacing:0; background-color:white;"> <!-- weiterer Code --> </table>
und habe den folgenden JavaScript Code entworfen (Anmerkung: Der Code ist in einer JSON Datei gespeichert):

  
ppDescription = data2.code.sections[0].text.replace(/<\s*table[^>]*>(.*?)<\s*\/\s*table>/g,"");  
console.log('ppDescription: ' + ppDescription);  

Problem dabei: Die Konsole gibt den HTML-Quellcode _mit_ Tables aus.
Die Frage ist: Wieso tut Firefox das? Ich habe den Regulären Ausdruck schon durch mehrere RegExp Tester laufen lassen, mit Erfolg. Wo liegt also das Problem?
Zur weiteren Info: Der Quellcode wird per Ajax von einem Server abgerufen, die Funktion oben wird jedoch im Callback ausgeführt, daran sollte es nicht liegen.

Grüße, Leon

--
ie:{ fl:) br:^ va:) ls:~ fo:| rl:( n4:& ss:| de:> js:) ch:| sh:} mo:} zu:(
  1. Hi,

    mir ist nicht ganz klar was du erreichen willst.

    Wenn du von allen table-Elementen alle Attribute entfernen willst würde ich das über DOM-Methoden machen und ganz sicher nicht irgendwas mit RegExp.
    Über alle document.getElementsByTagName('table') loopen und entsprechend dem was in .attributes steht die Attribute entfernen.
    Oder gibt es einen Grund dass du diesen Ansatz nicht verfolgen kannst?

    ~dave

    1. Hi,

      mir ist nicht ganz klar was du erreichen willst.

      Wenn du von allen table-Elementen alle Attribute entfernen willst würde ich das über DOM-Methoden machen und ganz sicher nicht irgendwas mit RegExp.
      Über alle document.getElementsByTagName('table') loopen und entsprechend dem was in .attributes steht die Attribute entfernen.
      Oder gibt es einen Grund dass du diesen Ansatz nicht verfolgen kannst?

      ~dave

      Hi,
      ja, es wäre günstig gewesen erstmal das Problem zu erläuten.
      Ich habe hierbei kein HTML-Dokument auf das ich zugreife sondern einen HTML-Code der als String in einer Varibale gespeichert ist. Deshalb kann ich auf diesen auch nicht mithilfe der DOM-Methoden zugreifen (oder?). Ich versuche aus diesem alle Tables mit Attributen und Inhalt zu entfernen.

      Grüße, CL

      --
      ie:{ fl:) br:^ va:) ls:~ fo:| rl:( n4:& ss:| de:> js:) ch:| sh:} mo:} zu:(
      1. Hi,

        Ich habe hierbei kein HTML-Dokument auf das ich zugreife sondern einen HTML-Code der als String in einer Varibale gespeichert ist. Deshalb kann ich auf diesen auch nicht mithilfe der DOM-Methoden zugreifen (oder?).

        Du könntest das Ganze aber ins DOM einhängen (z.B. in ein mit display:none; ausgeblendetes Element) und dann mit den DOM-Methoden arbeiten.
        Ich bin mir zwar sicher dass du das auch irgendwie mit RegExp umsetzen könntest, aber ich traue zumindest meinen selbst geschriebenen Regulären Ausdrücken ab einer bestimmten Komplexität nicht mehr.

        Ich versuche aus diesem alle Tables mit Attributen und Inhalt zu entfernen.

        Zum entfernen der kompletten Elemente dann selbstverständlich nicht extra über .attributes loopen sondern gleich das Element entfernen.

        ~dave

        1. Hi,
          mir bleibt wohl nichts anderes übrig, also werde ich diese Methode benutzen.
          Danke für die Hilfe :-)
          Grüße, CL

          --
          ie:{ fl:) br:^ va:) ls:~ fo:| rl:( n4:& ss:| de:> js:) ch:| sh:} mo:} zu:(
          1. Hi nochmal,
            Ich habe doch noch ein bisschen am Regulären Ausdruck rumgefeilt und bin letztendlich selbst auf meinen Fehler gekommen. Ich hatte bis jetzt den folgenden Regulären Ausdruck:
            /<table(.*?)\/table>/
            Jetzt habe ich nochmals den HTML-Code untersucht und bemerkt, dass dort Zeilenumbrüche auftreten.
            Meine Frage wäre, wie muss ich den Metacharakter \s benutzen, damit mein Regulärer Ausdruck neben jeden beliebigen Zeichen (.*?) auch Zeilenumbrüche findet.
            Wow ,selbst einfachste Reguläre Ausdrücke sind ein ziemlich komplex.

            Grüße, CL

            --
            ie:{ fl:) br:^ va:) ls:~ fo:| rl:( n4:& ss:| de:> js:) ch:| sh:} mo:} zu:(
            1. /<table(.*?)\/table>/
              Jetzt habe ich nochmals den HTML-Code untersucht und bemerkt, dass dort Zeilenumbrüche auftreten.
              Meine Frage wäre, wie muss ich den Metacharakter \s benutzen, damit mein Regulärer Ausdruck neben jeden beliebigen Zeichen (.*?) auch Zeilenumbrüche findet.

              Das ist einer der Gründe, warum ich reguläre Ausdrücke hasse: Zeilenumbrüche. Fast nie werden die unterstützt (Notepad++ _war_ mal eine lobende Ausnahme). Ich würde in einem ersten Durchlauf eine Zeilenumbrüche entfernen (per \n oder auch \r\n, je nach Input), dann kannst du im zweiten Durchlauf den Rest machen.

              1. /<table(.*?)\/table>/
                Jetzt habe ich nochmals den HTML-Code untersucht und bemerkt, dass dort Zeilenumbrüche auftreten.
                Meine Frage wäre, wie muss ich den Metacharakter \s benutzen, damit mein Regulärer Ausdruck neben jeden beliebigen Zeichen (.*?) auch Zeilenumbrüche findet.

                Das ist einer der Gründe, warum ich reguläre Ausdrücke hasse: Zeilenumbrüche. Fast nie werden die unterstützt (Notepad++ _war_ mal eine lobende Ausnahme). Ich würde in einem ersten Durchlauf eine Zeilenumbrüche entfernen (per \n oder auch \r\n, je nach Input), dann kannst du im zweiten Durchlauf den Rest machen.

                Hi,
                geht mir ähnlich. Mal davon abgesehen das reguläre Ausdrücke sehr komplex sind. Diese Möglichkeit habe ich komplett übersehen, danke für die Anregung!

                Grüße, CL

                --
                ie:{ fl:) br:^ va:) ls:~ fo:| rl:( n4:& ss:| de:> js:) ch:| sh:} mo:} zu:(
      2. Hi,

        Ich habe hierbei kein HTML-Dokument auf das ich zugreife sondern einen HTML-Code der als String in einer Varibale gespeichert ist. Deshalb kann ich auf diesen auch nicht mithilfe der DOM-Methoden zugreifen (oder?).

        XML-Code ist doch in JavaScript automatisch als XML-Objekt mit den DOM-Methoden ansprechbar. Jedenfalls im Firefox (im IE muss ggf. mit ActiveX das XML-Objekt erzeugt werden). Im Zusammenspiel mit jQuery funktioniert das sehr elegant.

        Gruss
        Stefanie