DRAEKIN: Markierter Text

Hallo,

gibt es eine Möglichkeit abzufragen, ob sich der Inhalt eines Tags komplett in einer Markierung (textRange) befindet, ohne dabei die Methode "moveToElementText()" zu benutzen?

Gruß,

DRAEKIN

  1. moin DRAEKIN :)

    da bisher keine Antworten kamen, nehme ich fast an, dass es anderen potentiellen Antwortern genauso geht wie mir (ich versteh nicht was du meinst).

    Magst du vielleicht ein bisschen mehr beschreiben, was du suchst?

    liebe Grüße aus Berlin
    lina-

    --
    Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
    1. Hi,

      ich habe einen Text, der mit diversen Tags gegliedert ist. Der Nutzer soll einen beliebigen Textteil markieren können, um für diesen Abschnitt die Style-Eigenschaft ändern zu können. Jetzt hat er aber möglicherweise nicht punktgenau den "innertext" von einem Tag markiert, sonst könnte man die Eigenschaft (z.B. Farbe) ja so ändern:

      document.selection.createRange().parentElement.style.color = 'blue'.

      Die zweite Möglichkeit wäre, den markierten Text, inklusive HTML-Tags zwischen zwei <Span>-Tags zu packen, die die Eigenschaft enthalten.
      Also z.B. so:

      document.selection.createRange.pasteHTML("<SPAN style="color:blue; ">" & document.selection.createRange.htmltext & "</SPAN>")

      Wenn der HTML-Text dazwischen aber schon ein <Span>-Tag enthält, das eine andere Farbeigenschaft hat, bleibt der "innertext" davon von der Änderung ausgeschlossen. Die dritte Möglichkeit wäre dann, als erstes den zu ändernden Text mit <Span>-Tags zu umschließen, und dann jeden darin enthaltenen Tag zu durchlaufen, abzufragen ob der Text komplett in der Markierung - also im Range - ist und wenn ja die Style-Eigenschaft zu ändern. Wie würde das funktionieren?

      Ich brauche das ganze für ein Visual Basic .NET Projekt, um es im "DHTML Edit Control for IE5" anzuwenden. Es muss also nur im IE funktionieren, und ich muss es noch in VB-Code abändern. Und dieses Control interpretiert eben nicht die Funktion "MoveToElementText()", mit der man dies ja einfach realisieren kann.

      Kann mir jemand hierbei helfen oder kennt jemand eine einfachere Möglichkeit markierten Text zu formatieren?

      Gruß,

      DRAEKIN

      1. moin DRAEKIN :)

        Die dritte Möglichkeit wäre dann, als erstes den zu ändernden Text mit <Span>-Tags zu umschließen, und dann jeden darin enthaltenen Tag zu durchlaufen, abzufragen ob der Text komplett in der Markierung - also im Range - ist und wenn ja die Style-Eigenschaft zu ändern. Wie würde das funktionieren?

        Das wäre auch der Weg den ich einschlagen würde.
        1. Selection ermitteln
        2. prüfen ob in der Selection Tags sind
        3. prüfen ob Tags abgeschlossen werden innerhalb der Selection (was machst du eigentlich wenn dies nicht der Fall ist?
        4. prüfen ob Tags entsprechende style-Eigenschaften besitzen
        6. gegebenenfalls style-Eigenschaften ändern.

        Was genau fehlt dir, um dies zu realisieren? Als Tipp könnte ich dir RexExp ans Herz legen oder auch Stringzauberei

        liebe Grüße aus Berlin
        lina-

        --
        Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
        1. Hi,

          ich hatte eher daran (http://htmlworld.de/program/js_o_tra.php) gedacht, weil man - wenn ich das richtig verstanden habe - bei "RexExp" und "Stringzauberei" den Quelltext nach Tags und Attributen durchsucht und diese dann ersetzt oder bearbeitet, während die Methoden von htmlworld auf das DOM setzen. Ich lasse mich aber auch gerne eines besseren belehren.

          Auf www.online-html-editor.de/ ist scheinbar auch mit dem Textrange Objekt das WYSIWYG realisiert worden (siehe Quelltext: www.online-html-editor.de/scripts/editor.js). Mir fehlt also das Wissen, wie ich herausfinden kann ob sich der (komplette) innertext eines Elements in einer Textrange befindet.

          Gruß,

          DRAEKIN

          1. moin DRAEKIN :)

            Mir fehlt also das Wissen, wie ich herausfinden kann ob sich der (komplette) innertext eines Elements in einer Textrange befindet.

            Wieso erstellst du dann nicht aus dem innertext des Elementes einen String und gleichst ihn gegen den Inhalt der Textrange ab?

            liebe Grüße aus Berlin
            lina-

            --
            Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
            1. Hi,

              das funktioniert soweit. Danke! Jetzt habe ich als (hoffentlich) letztes Problem, dass Textstücke die nicht in einem Range lagen, nicht formatiert wurden. Ich muss diese also noch heraussuchen und mit <span>-Tags umschließen. Ich habe allerdings hierfür keine Möglichkeit gefunden.

              Gruß,

              DRAEKIN

              1. moin DRAEKIN :)

                das funktioniert soweit. Danke! Jetzt habe ich als (hoffentlich) letztes Problem, dass Textstücke die nicht in einem Range lagen, nicht formatiert wurden. Ich muss diese also noch heraussuchen und mit <span>-Tags umschließen. Ich habe allerdings hierfür keine Möglichkeit gefunden.

                Ich dachte, die Textstücke die nicht selectiert wurden, sollen auch nicht formatiert werden? Oder verstehe ich etwas an deinem Anwendungsfall nicht? Gib doch mal ein Beispiel.

                liebe Grüße aus Berlin
                lina-

                --
                Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
                1. Hi,

                  der selektierte text soll formatiert werden. Allerdings markiert der Anwender ja meistens so, das ein eines innertextes von einem Element markiert ist, ein anderer nicht. Ein Beispiel.

                  <span>A B C D E F G H I J K</span>
                  <span>L M N O P Q R S T U V W X Y Z</span>

                  Angenommen der Anwender markiert von "A" - "V". Dann wird das erste Span-Element komplett formatiert, aber beim zweiten müssen W, X, Y und Z unformatiert bleiben. Dann müsste das so aussehen:

                  <span style="color:blue; ">A B C D E F G H I J K</span>
                  <span><span style="color:blue; ">L M N O P Q R S T U V </span>W X Y Z</span>

                  Wie kann ich das erreichen?