Wie kann eine JavaScript-Funktion ausgelöst werden, wenn jemand mit der Maus ein bestimmtes Textfragment auf einer Seite auswählt ?
Gibt es auch eine Möglichkeit, die Position des ausgewählten Textes auf der Seite zu ermitteln?
Update: Um es klarer zu machen, kann ein Textfragment Teil eines Satzes oder eines Wortes oder einer Phrase oder eines ganzen Absatzes sein.
quelle
document.addEventListener('keyup', function(e) { var key = e.keyCode || e.which; if (key == 16) highlight(); });
window.getSelection()
möglicherweise alteselection
Objekte fürmouseup
Ereignisse zurückgegeben werden.Hier ist ein kurzes Mashup:
$('div').mouseup(function() { var text=getSelectedText(); if (text!='') alert(text); }); function getSelectedText() { if (window.getSelection) { return window.getSelection().toString(); } else if (document.selection) { return document.selection.createRange().text; } return ''; } <div>Here is some text</div>
Demo: http://jsfiddle.net/FvnPS/11/
quelle
window.getSelection();
den IE entsprichtdocument.selection.createRange().text;
. Kopieren Personen aus derselben ungenauen Quelle? Gibt jedenfallswindow.getSelection()
einSelection
Objekt zurück, währenddocument.selection.createRange().text;
eine Zeichenfolge zurückgegeben wird, bei der es sich um ein ganz anderes Objekt handelt. Die Verwirrung ergibt sich aus der Tatsache , dass dastoString
Verfahren vonSelection
Objekt den ausgewählten Text zurückgibt, dass bedeutet ,alert(window.getSelection());
wird der ausgewählte Text aufmerksam zu machen .Es gibt eine neue experimentelle API, die sich damit befasst:
Das Auswahländerungsereignis der Auswahl-API wird ausgelöst, wenn das Auswahlobjekt des Dokuments geändert wird oder wenn sich die mit einer
<input>
oder einer<textarea>
Änderung verknüpfte Auswahl ändert. Das Auswahländerungsereignis wird im ersten Fall auf das Dokument und im zweiten Fall auf das Element ausgelöst.https://developer.mozilla.org/en-US/docs/Web/Events/selectionchange
Beachten Sie, dass dies auf dem neuesten Stand ist und nicht garantiert wird, dass es auch in großen Browsern funktioniert.
quelle
AFAIK, es gibt kein solches Ereignis, das Sie beschrieben haben. Sie können diese Funktion jedoch emulieren.
Schauen Sie hier nach dem Code und der Demo.
quelle
Es gibt das Ereignis "Text wurde ausgewählt". Aber nur für Textbereiche, wie ich sie kenne.
<textarea onselect="message()" name="summary" cols="60" rows="5"> 请写入个人简介,不少于200字! </textarea>
quelle
var selectedText = ""; if (window.getSelection) { selectedText = window.getSelection(); } if (document.getSelection) { selectedText = document.getSelection(); } if (document.selection) { selectedText = document.selection.createRange().text; } function textSelector() { alert(selectedText); } textSelector();
quelle
Ich bin mir bei der Maus nicht sicher, aber diese Zeile funktioniert für Mobilgeräte. Sie wird jedes Mal aufgerufen, wenn eine Änderung an der Textauswahl vorgenommen wird.
document.addEventListener('selectionchange', () => { });
quelle
Wenn Sie die Maustaste drücken, wird das
mousedown
Ereignis ausgelöst. Wenn Sie die Maustaste loslassen, werden die Ereignissemouseup
und dannclick
ausgelöst.Wir hören uns das
mouseup
Ereignis an und prüfen, ob Text ausgewählt wurde, und führen die entsprechenden Vorgänge aus.const p = document.getElementById('interactiveText'); p.addEventListener('mouseup', (e) => { const selection = window.getSelection().toString(); if (selection === '') { console.log('click'); } else { console.log('selection', selection); } });
quelle