Jürgen Herz: Länge des Strings aus window.getSelection()

Hallo,

mein Ziel ist den im Browser selektierten Text auszulesen und zu verwenden. Falls keine Selektion vorhanden (d.h. kein Text in der Selektion) soll ein Default verwendet werden.

Mit
  var selection = document.getSelection();
  if (!selection.length)
    selection = DEFAULTWERT;
funktioniert das auch (length == 0 wenn Text markiert, andernfalls != 0).
Allerdings ist das über document deprecated und wird auch von Mozilla (1.8a) angemeckert.

Verwende ich
  var selection = window.getSelection();
wird der Text auch in selection übernommen, length bleibt aber aus unerfindlichen Gründen immer undefined.

Die Abfrage auf Text in selection kriege ich unter den Umständen einfach nicht hin.
Daher meine Fragen,
a) Wie muß die Abfrage aussehen?
b) Ist dieses Benehmen (length ist undefined) überhaupt ok so?

Grüße,
Jürgen

P.S. Ja, ich selectionStart habe die Posts zu selectionEnd gelesen. Aber ist das wirklich der einzige Ausweg?

  1. Hallo Jürgen,

    Wenn Du nur prüfen willst, ob Text selectiert ist, kannst Du das auch einfach mit if(document.getSelection()) { } machen.
    Aber abgesehen davon ist document.getSelection().length zumindest im Mozilla immer definiert.

    Grüße

    Daniel

    1. Aber abgesehen davon ist document.getSelection().length zumindest im Mozilla immer definiert.

      Ich denke, da ein deprecated Warning ausgeworfen wird, wird es wohl über kurz oder lang rausfallen.

      Jürgen

      1. Hallo Jürgen,

        mein Posting von Gestern ist verschwunden. Also nochmal:

        window.getSelection() gibt ein Objekt zurück, das hier dokumentiert ist: http://lxr.mozilla.org/seamonkey/source/content/base/public/nsISelection.idl (IDL Schnittstellendefinition)
        Es ist von DOMRange abgeleitet. Du kannst so also nicht nur auf den selektierten Text sondern auf alle selektierten DOM-Knoten zugreifen.
        An die Länge kommst Du dann mit: window.getSelection().toString().length

        Grüße

        Daniel

  2. Hi,

    Verwende ich
      var selection = window.getSelection();
    wird der Text auch in selection übernommen, length bleibt aber aus unerfindlichen Gründen immer undefined.

    length ist eine Eigenschaft von String-Objekten. Entweder liefert diese Methode also kein solches - überprüfe also, welchen Typs die Rückgabe ist - oder Du machst etwas falsch.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo,

      length ist eine Eigenschaft von String-Objekten. Entweder liefert diese Methode also kein solches - überprüfe also, welchen Typs die Rückgabe ist

      Keine Ahnung wie man das macht. Aber stimmt, z.B. toUpperCase() funktioniert auch nicht auf selection.

      Nach nochmaligem Suchen und nachlesen habe ich http://www.mozilla.org/docs/dom/domref/dom_window_ref24.html gefunden.
      Also ist es tatsächlich kein String, sondern ein selection Objekt. (-> selection = window.getSelection().toString();)

      Da frage ich mich nur, ob das auch standardkonform ist, lt. der Seite ist es ja kein Teil der offiziellen Spezifikation. D.h. wie soll jemand der browserübergreifend programmieren will, vorgehen?

      Jürgen

      1. Hi,

        length ist eine Eigenschaft von String-Objekten. Entweder liefert diese Methode also kein solches - überprüfe also, welchen Typs die Rückgabe ist
        Keine Ahnung wie man das macht.

        z.B. mit typeof().

        Da frage ich mich nur, ob das auch standardkonform ist, lt. der Seite ist es ja kein Teil der offiziellen Spezifikation.

        Und damit handelt es sich um eine proprietäre Erweiterung :-)

        D.h. wie soll jemand der browserübergreifend programmieren will, vorgehen?

        Den Objekttyp bzw. (tendenziell vorzuziehen) die Existenz zu verwendender Methoden und Unterobjekte abfragen.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes