Javascript: So erkennen Sie, ob ein Wort hervorgehoben ist

Lesezeit: 4 Minuten

Ich schreibe ein Firefox-Addon, das ausgelöst wird, wenn ein Wort hervorgehoben wird. Ich brauche jedoch ein Skript, das erkennt, wenn ein Wort hervorgehoben wird, und ich stecke fest. Ein Beispiel wäre nytimes.com (wenn Sie einen Artikel lesen und ein Wort markieren, erscheint das Referenzsymbol). Das nytimes.com-Skript ist jedoch sehr komplex. Ich bin 16 und kein großer Programmierer, also ist das definitiv weit außerhalb meiner Liga.

Der einfachste Weg, dies zu tun, ist zu erkennen mouseup und keyup Ereignisse auf dem Dokument und prüfen Sie, ob Text ausgewählt ist. Das Folgende funktioniert in allen gängigen Browsern.

Beispiel: http://www.jsfiddle.net/timdown/SW54T/

function getSelectedText() {
    var text = "";
    if (typeof window.getSelection != "undefined") {
        text = window.getSelection().toString();
    } else if (typeof document.selection != "undefined" && document.selection.type == "Text") {
        text = document.selection.createRange().text;
    }
    return text;
}

function doSomethingWithSelectedText() {
    var selectedText = getSelectedText();
    if (selectedText) {
        alert("Got selected text " + selectedText);
    }
}

document.onmouseup = doSomethingWithSelectedText;
document.onkeyup = doSomethingWithSelectedText;

  • Aber was ist, wenn Sie erkennen möchten, ob ein bestimmtes Wort ausgewählt ist? Sagen Sie, Sie haben foo auf der Seite mehrmals und der Benutzer wählt aus foo Woher wissen Sie, welches der Wörter der Benutzer ausgewählt hat?

    – Jespertheend

    8. Oktober 16 um 19:39 Uhr

  • @Jespertheend wenn die Daten (foos) wird dynamisch generiert, dann können Sie jedem eine eindeutige ID geben foo und dann können Sie verwenden window.getSelection().getRangeAt(0).startContainer.parentNode.id um das Besondere zu bekommen foo‘s ID.

    – Raghav Garg

    12. April 18 um 4:46 Uhr

  • Das ist großartig, danke! Ich wollte eine benutzerdefinierte maxlength-Funktionalität auf einem implementieren keypress Ereignis einer Eingabe, aber wenn die Eingabe bereits auf ihrem Maximum ist, sollte der Tastendruck trotzdem durchgehen, wenn irgendein Text hervorgehoben ist. Ihre Funktion hat den Job perfekt gemacht

    – Jakob Stamm

    15. Juni 18 um 20:14 Uhr

Welche Browser unterstutzen HTML 5 Tag auf Windows heute
Tom Güllen

Hier ist ein Skript:

<script>
function getSelText()
{
    var txt="";
    if (window.getSelection)
    {
        txt = window.getSelection();
    }
    else if (document.getSelection)
    {
        txt = document.getSelection();
    }
    else if (document.selection)
    {
        txt = document.selection.createRange().text;
    }
    else return;
document.aform.selectedtext.value = txt;
}
</script>
<input type="button" value="Get selection" onmousedown="getSelText()"> 
<form name="aform">
<textarea name="selectedtext" rows="5" cols="20"></textarea>
</form>

Mit freundlicher Genehmigung von Code Toad:

http://www.codetoad.com/javascript_get_s selected_text.asp

In Ihrem Fall möchten Sie dieses Skript aufrufen, wenn die Auswahl getroffen wurde, und Sie können es dann beliebig verarbeiten, z. B. mit einer AJAX-Anfrage, um relevante Informationen zu erhalten, wie dies wahrscheinlich bei NYtimes der Fall ist.

  • Ich sehe immer wieder diesen Code auf SO, und er ist falsch: window.getSelection() gibt a zurück Selection Objekt, kein String.

    – Tim unten

    17. Januar 11 um 12:26 Uhr

  • @tim runter nicht die ganze Wahrheit. Das Objekt hat eine toString() Methode. Wenn eine Zeichenfolge erwartet wird, wird eine Zeichenfolge zurückgegeben, andernfalls wird, wie Sie darauf hinweisen, ein Objekt zurückgegeben. developer.mozilla.org/en-US/docs/Web/API/Window/getSelection

    – Ted Cohen

    4. März 15 um 16:08 Uhr

  • @TedCohen: Es stimmt, dass a Selection Objekt hat einen Sinn toString() Implementierung, aber der Rest Ihres Kommentars ergibt keinen Sinn: a Selection Objekt wird immer zurückgegeben, wenn window.getSelection existiert (was in allen modernen Browsern der Fall ist).

    – Tim unten

    4. März 15 um 16:27 Uhr

  • Ja, die Methode gibt ein Objekt zurück. Wenn es kein Objekt zurückgegeben hat, wie könnte das zurückgegebene “Ding” dann eine toString() -Methode haben, auf die wir uns beide einigen. Womit ich nicht einverstanden bin, ist Ihre Aussage, dass der Code falsch ist. Was Sie vergessen, ist, dass die js-Sprache die ganze Zeit implizit Dinge umwandelt. Manche Leute nennen das eine schwach typisierte Sprache. Alle js-Programmierer müssen das Casting erkennen und als das erkennen, was es ist. Nachdem der Browser das Objekt zurückgibt, ruft js implizit die Methode toString() auf und gibt einen String zurück. Das passiert für jedes Objekt in js, nicht nur für getSelection(). Der Code ist NICHT falsch

    – Ted Cohen

    5. März 15 um 1:54 Uhr

  • @tim down, weshalb du es die ganze Zeit auf SO siehst. Bitte lesen Sie die Referenz in meinem ursprünglichen Kommentar, da sie ziemlich klar formuliert, was ich sage, wahrscheinlich besser als ich es jemals könnte.

    – Ted Cohen

    5. März 15 um 1:56 Uhr

In meinem Fall wollte ich in der Lage sein, entweder einen Text in einer Reihe von hervorzuheben und in die Reihe zu klicken und mich zu einer anderen Route wie „/entity/:id“ zu schicken;

Ich habe eine Funktion erstellt, die erkennt, dass die Maus Text hervorhebt:

export const isHighlighting = () => {
  // detects mouse is highlighting a text
  return window.getSelection && window.getSelection().type === 'Range';
};

dann fügte ich dies der Reihe der hinzu

const handleClick = (id) => {
  if (!isHighlighting() {
     history.push(`/entity/${id}`)
  }
}

{data.map((item) => (
  <tr>
    <td onClick={() => handleClick(item.id)}>{item.name}</>
  </tr>
))}

Auf diese Weise kann der Benutzer das Namensfeld hervorheben oder irgendwo anders klicken und zu “/entity/:id” gehen.

Verwenden Rangy.js und jQuery:

$('#elem').on('keyup mouseup', function(){
    var sel = rangy.getSelection()
    if (sel.rangeCount === 0 || sel.isCollapsed) return
    alert(sel.toString())
})

.

596030cookie-checkJavascript: So erkennen Sie, ob ein Wort hervorgehoben ist

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy