ivorysmoker: Fehler bei verschieden formatierten Texten (Fortgeschritten)

Hallo zusammen

Ich habe da noch ein Problem was mich echt fertig macht, daher habe ich mich endschlossen hier einen kleinen Beitrag zu verfassen und hoffe sehr, dass mir jemmand diesbezüglich helfen kann.

Vorwort:
Jedes Wort oder jeder Satz kann formatiert werden, makiert man den selben Abschnitt ist es auch ohne weiteres möglich weitere Attribute hinzuzufügen z.b farbe etc...

Beschreibung des Fehlers:
Auf dem Bild seht Ihr 2 verschieden formatierte Worte, das problem besteht jetzt darin:
Wenn man 2 Wörter oder Sätze makiert die unterschiedlichen formatiert sind, hat meine Funktion ein Problem. Mein erster Gedanke war, dass es möglicherweise mit den Tags was zutuhen hat.

Ein bsp: Makiert man (ein Test) wie auf dem Foto, wäre der String davon der an die unten aufgelistet funktion weiter gegeben wird = ein</px26> <px44>Test

Hier ein Code Schnippsel:

  
                var sel = window.getSelection();  
                //console.log(sel);  
                if(sel == ""){  
                    alert("Bearbeitungs Modus aktiviert: Makieren Sie den gewünschten Text");  
                    return;  
                }  
                alert(sel);  
                /*console.log(sel);  
                return;*/  
                var ersteSelRange = sel.getRangeAt(0);  
  
                if (!ersteSelRange.collapsed) {  
  
                    var startContainer = ersteSelRange.startContainer;  
                    var endContainer = ersteSelRange.endContainer;  
                    //alert("Leider können noch nicht mehrere Zeilen gleichzeitig formatiert werden.");  
                if (startContainer == endContainer) {  
  
                    var posStart = ersteSelRange.startOffset;  
                    var posEnd = ersteSelRange.endOffset;  
                     /*alert('StartPosition'+posStart);  
                     alert('EndPosition'+posEnd);*/  
                    var startContainerText = startContainer.textContent;  
  
                    var ersteSelRangeText = ersteSelRange.toString();  
                    //alert('RegEx Ausgabe: 'regexfirst+regexnext);  
                    startContainer.textContent = startContainerText.substr(0, posStart) + regexfirst + ersteSelRangeText + regexnext +  
                    startContainerText.substr(posEnd);  
                    //alert("Ist die Komplette Zeile: "+ersteSelRangeText);  
  }  
 }  
                //var ausgabe = range.startOffset;  
  
                //var spliterOriginal = OriginalText.substr(0, ausgabe);  
                //alert(spliterOriginal);  
                //var spliter = OriginalText.substr(ausgabe);  
                //alert(spliter);  
                    var AusgabeText = document.getElementById("newest").innerHTML;  
                    var OriginalTextEnd = AusgabeText.replace(/<p>br<[/]p>/g, "<br>");  
                    /*var OriginalTextEnd = OriginalTextEnd.replace(/</g, "&lt;");  
                    var OriginalTextEnd = OriginalTextEnd.replace(/>/g, "&gt;");*/  
                    OriginalTextEnd.trim();  
                    document.getElementById("newest").innerHTML = OriginalTextEnd;  

Jetzt hoffe ich auf gute Ideen, falls Ihr mehr Einblick haben müsst, zöggert nicht mir dies mitzuteilen.

Vielen Dank schon einmal zum voraus!
Grüsse Ivorysmoker

  1. Ich könnt höchstens vorstellen es liegt an nicht korrekt in sich verschachtelten Tags? Dann könntest du die Tags auseinandernehmen und bei Bedarf mehrfach hintereinander schreiben.
    Beispiel:
    a b c <x>d e f</x>
    soll von b bis d zusätzlich mit <y> markiert werden.
    a <y>b c <x>d</y> e f</x> ist ungültig.
    Dann mach das draus: a <y>b c</y> <x><y>d</y> e f</x>

    hat meine Funktion ein Problem.

    Trotz meiner Vermutung ist es eine sehr sinnvolle Idee das Problem zu verraten.

    1. Ich könnt höchstens vorstellen es liegt an nicht korrekt in sich verschachtelten Tags? Dann könntest du die Tags auseinandernehmen und bei Bedarf mehrfach hintereinander schreiben.
      Beispiel:
      a b c <x>d e f</x>
      soll von b bis d zusätzlich mit <y> markiert werden.
      a <y>b c <x>d</y> e f</x> ist ungültig.
      Dann mach das draus: a <y>b c</y> <x><y>d</y> e f</x>

      Hi Encoder

      Leider war die Zeit etwas knap um auf deine Beitrag zu antworten. Vielen Dank erst einmal für deinen Anreiz.

      hat meine Funktion ein Problem.
      Trotz meiner Vermutung ist es eine sehr sinnvolle Idee das Problem zu verraten.

      Wenn ich das genaue Problem wüsste, würde ich dies natürlich schildern. Leider weiss ich das genaue Problem auch nicht. Ich habe nur ein Paar Vermutungen aufgestellt über die Tags sowie vom String, da ich einen ähnlicher Fehler schon hatte.

      Soviel ist schon klar:

      1. Wenn in einem String der Makiert wurde sich keine Tags befinden funktioniert alles wunderbar. (Auch auf mehrere Zeilen etc..)
      1.1 String: Ich bin der Makierte String

      2. Wenn der String der Makiert wurde schon einzeln formatierte Worte hat, dann gibs eben dieses unbekannte Problem.
      2.1 String: Ich bin formatiert</px> <px>und ich auch! = Fehler!
      2.2 Die Tags umwandeln wäre eine sinvolle Idee, leider führt dies zu noch mehr Problemen unten dazu mehr.
      2.3 Was ich mir dazu überlegt habe:
      Sovern ja keine Tags vorhanden sind funktioniert alles problemlos, der einfachste weg wäre gewesen alle Tags umzuwandeln, befor Sie an die schon bestehende Funktion weitergeleitet wird.
      Nur Leider fangen hier ganz viele neue Probleme an, da die Anzeige über Tags gesteuert wird! Es hätte also zur folge das man im Code dan sowas sieht <px69>Ich wäre 69 PX Gross</px69>, statt wie bisher die (69 Grosse PX) schrift.

      3. Ursprung des Problemes:
      3.1 //Kommentiert

        
      var ersteSelRange = sel.getRangeAt(0);  
        
                      if (!ersteSelRange.collapsed) {  
        
                          var startContainer = ersteSelRange.startContainer;  
                          var endContainer = ersteSelRange.endContainer;  
        
                      if (startContainer == endContainer) {  
        
                          var posStart = ersteSelRange.startOffset;  
                          var posEnd = ersteSelRange.endOffset;  
                           /*alert('StartPosition'+posStart);  
                           alert('EndPosition'+posEnd);*/  
                          var startContainerText = startContainer.textContent;  
        
                          var ersteSelRangeText = ersteSelRange.toString();  
                          //alert('RegEx Ausgabe: 'regexfirst+regexnext);  
        
                          //Hier wird der String zusammengebaut und hier befindet sich auch das Problem denke ich, da ich denke sobald zwischen den Zeilen Tags sind stimmen möglicherweise die Suchpositionen nicht mehr überein oder was ich eher denke das Tags abgewissen werden und es ein reiner Text-String sein muss, also ohne Elemente. Da es jetzt aber sehr wichig ist das diese Tags vorhanden sind und man leider über die Funktion nicht direkt den Container ansteuern/verändern kann, ist eine Lösung für dieses Problem eusserst schwirig...  
        
                          startContainer.textContent = startContainerText.substr(0, posStart) + regexfirst + ersteSelRangeText + regexnext +  
                          startContainerText.substr(posEnd);  
                          //alert("Ist die Komplette Zeile: "+ersteSelRangeText);  
        }  
       }  
      
      

      Ich hoffe ich konnte es etwas genauer schildern und freue mich auf Rückmeldungen.

      Grüsse Ivorysmoker

      1. Ich komme da nicht mehr ganz mit. Du weißt schon dass wir alle keine Ahnung haben was du machst, wie du das machst und was nicht funktioniert? Du müsstest mal ein Beispiel bringen was wie passieren soll und was stattdessen passiert.

        1. Wenn ... funktioniert alles wunderbar.

        was funktioniert?

        2.1 String: Ich bin formatiert</px> <px>und ich auch! = Fehler!

        Dass das für sich keine gültige Auszeichnung mit Tags ist leuchtet jedem ein. Aber was ist passiert damit es dazu kam und wie sollte es richtig aussehen?

        dieses unbekannte Problem.

        Immerhin hast du ja schon erkannt dass was nicht passt. Das kannst du doch beschreiben?

        Versuch mal textuell zu erklären was du machen willst und wie du das machst. Überlege dir ob jemand das verstehen kann der deine Gedanken dazu nicht kennt.

        Wenn du Tags einfügst hast du mit gemerkten Position ein Problem. Das leuchtet mir ein. Wenn du schon keinen fertigen Editor verwenden willst würde es trotzdem nicht schaden wenn du dir einen ansiehst und abschaust wie der sowas macht.

    2. @Encoder

      Ich denke wirklich das es an dem String liegt, da sobald die Tags im String sind es zu einem collaps kommt. Somit wird das ersetzen nicht ausgeführt.

      Grüsse Ivorysmoker

  2. Liebe(r) ivorysmoker,

    warum nutzt Du nicht einen fertigen WYSIWYG-Editor wie den TinyMCE? Der lässt sich wunderbar konfigurieren und "repariert" Dir auch die unterschiedlichen Zicken der diversen Browser.

    Liebe Grüße,

    Felix Riesterer.

    --
    "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
    1. Liebe(r) ivorysmoker,

      warum nutzt Du nicht einen fertigen WYSIWYG-Editor wie den TinyMCE? Der lässt sich wunderbar konfigurieren und "repariert" Dir auch die unterschiedlichen Zicken der diversen Browser.

      Liebe Grüße,

      Felix Riesterer.

      Lieber Felix

      Leider ist dein Beitrag nicht das wonach ich suche, wenn ich einen fertig Editor nehmen wollte, hätte ich dies schon lange getan.

      Grüsse Ivorysmoker

      1. Liebe(r) ivorysmoker,

        jetzt schau Dir mal an, was Encode als letzten Satz geschrieben hat, und dass ich nach dem "warum kein fertiger Editor" gefragt habe. Uns beiden gibst Du keine sinnvolle Antwort. Deshalb kann man Dir nicht helfen.

        Du brauchst offensichtlich keine Hilfe.

        Liebe Grüße,

        Felix Riesterer.

        --
        "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
        1. Liebe(r) ivorysmoker,

          jetzt schau Dir mal an, was Encode als letzten Satz geschrieben hat, und dass ich nach dem "warum kein fertiger Editor" gefragt habe. Uns beiden gibst Du keine sinnvolle Antwort. Deshalb kann man Dir nicht helfen.

          Du brauchst offensichtlich keine Hilfe.

          Liebe Grüße,

          Lieber Felix

          Was hat den bitte sein letzter Satz mit deiner Antwort zu tuhen?
          Über Encoder seine Antwort habe ich mir gedanken gemacht, hingegen bei deinem Beitrag, wiso ich keinen fertigen Editor nehme, war meine Antwort schnell klar ;)

          Ich brauche keine solchen Antworten da hast du recht!

          Betreff: JAVASCRIPT: Fehler bei verschieden formatierten Texten (Fortgeschritten)

          Grüsse Ivorysmoker