Marco: Replace

Hallo zusammen

mit folgendem Script setze ich einen "span" Tag um den markierten Textbereich. Das erste Mal funktioniert das auch. Jedoch beim zweiten mal sollte es den alten "Span" Tag löschen und den neuen hinschreiben.

Wie kann ich das lösen? Hat mit da jemand einen Tipp?

Gruss Marco

function CSS(nr){
  var sel = Bereich1.document.selection.createRange().text;
  var res = "<span class='Titel1'>"+sel+"</span>";
  sel = "/" + sel + "/";
  Bereich1.document.getElementById("message").outerHTML= Bereich1.document.getElementById("message").outerHTML.replace(eval(sel), res);
  }

  1. Hallo Marco

    mit folgendem Script setze ich einen "span" Tag um den markierten Textbereich. Das erste Mal funktioniert das auch. Jedoch beim zweiten mal sollte es den alten "Span" Tag löschen und den neuen hinschreiben.

    Wie kann ich das lösen? Hat mit da jemand einen Tipp?

    Das Löschen alter Elemente ist schwierig, da Markierungen meist sehr ungenau sind.

    Beste Lösung: Frage die Klickposition und das an dieser Stelle existierende Element ab. Von diesem Element kannst du dann entweder die CSS-Eigenschaft ändern oder das Element entfernen.

    Viele Grüße

    Antje

    1. Hallo Marco

      mit folgendem Script setze ich einen "span" Tag um den markierten Textbereich. Das erste Mal funktioniert das auch. Jedoch beim zweiten mal sollte es den alten "Span" Tag löschen und den neuen hinschreiben.

      Wie kann ich das lösen? Hat mit da jemand einen Tipp?

      Das Löschen alter Elemente ist schwierig, da Markierungen meist sehr ungenau sind.

      Beste Lösung: Frage die Klickposition und das an dieser Stelle existierende Element ab. Von diesem Element kannst du dann entweder die CSS-Eigenschaft ändern oder das Element entfernen.

      Viele Grüße

      Antje

      hmm...kannst du mir noch was genauers sagen?

      Marco

      1. Hallo Marco

        hmm...kannst du mir noch was genauers sagen?

        überwache den Klickevent

        speichere die Position:

        posX=deinbereich.event.clientX;
        posY=deinbereich.event.clientY;

        und hier hast du das Element, das unter dem Klickpunkt liegt:

        var element=deinbereich.elementFromPoint(posX,posY);

        Mehr dazu in der MS-Doku: Stichwort textrange

        Viele Grüße

        Antje

  2. Deine Darstellung ist etwas oberflächlich und wenig aussagekräftig. Zum Thema Tags löschen und neu erstellen hier eine kleine einfache Hilfestellung.

    Gib Deinem Span Tag eine ID (Bsp."ibM"). Anschliesend rufst Du den Span Tag mit unten aufgeführten Befehl auf und setzt die Attribute neu. Das hat in etwa die gleiche Wirkung wie löschen und neu machen.

    document.getElementById("ibM").setAttribute("class","Titel2");

    Mit setAttribute kannst Du alle Attribute ändern.

    Mail mich an für weitere Fragen.

    Stefan

    1. HGallo Stefan

      Deine Darstellung ist etwas oberflächlich und wenig aussagekräftig. Zum Thema Tags löschen und neu erstellen hier eine kleine einfache Hilfestellung.

      nein, mir war sie völlig klar. Marco spielt mit dem contenteditable-Modus im IE.

      Gib Deinem Span Tag eine ID (Bsp."ibM"). Anschliesend rufst Du den Span Tag mit unten aufgeführten Befehl auf und setzt die Attribute neu. Das hat in etwa die gleiche Wirkung wie löschen und neu machen.

      Ganz so einfach ist es nicht. Marcus hat die Unberechenbarkeit eines Redakteurs oder ähnlichee Personen zu berücksichtigen (Erfahrungswert: da wurde sich beschwert, dass ein solcher Editor keine kompletten Word-Funktionalitäten bietet)

      document.getElementById("ibM").setAttribute("class","Titel2");

      Mit setAttribute kannst Du alle Attribute ändern.

      das Problem ist, im Normalfall macht es keinen Sinn mit IDs zu arbeiten. Hier braucht man das Element selbst und genau das ist Marcos Problem, da der Text zur Laufzeit generiert wird und ich ständig ändern kann.

      Viele Grüße

      Antje