Länge des Strings aus window.getSelection()
Jürgen Herz
- javascript
0 Daniel Thoma0 Cheatah0 Jürgen Herz0 Cheatah
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?
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
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
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
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
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
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