Heim  >  Artikel  >  Web-Frontend  >  Wie bekomme ich das Wort mit JavaScript unter den Mauszeiger?

Wie bekomme ich das Wort mit JavaScript unter den Mauszeiger?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-26 07:06:03281Durchsuche

How to Get the Word Under the Mouse Cursor with JavaScript?

Wie man mit JavaScript das Wort unter dem Cursor abruft

Das Bestimmen des Wortes, über dem sich der Mauszeiger befindet, ist eine wesentliche Aufgabe für Text -basierte Anwendungen. Angenommen, Sie haben eine HTML-Seite mit einem Textabsatz:

<code class="html"><p> some long text </p></code>

Wie können Sie erkennen, dass sich der Cursor über dem Wort „Text“ befindet? In diesem Artikel wird eine Lösung vorgestellt, die speziell auf Chrome (und möglicherweise Firefox) zugeschnitten ist.

JavaScript-Implementierung:

<code class="javascript">function getWordAtPoint(elem, x, y) {
  if (elem.nodeType == elem.TEXT_NODE) {
    // Create a range and position it within the element's text content
    var range = elem.ownerDocument.createRange();
    range.selectNodeContents(elem);

    // Initialize position variables
    var currentPos = 0;
    var endPos = range.endOffset;

    // Iterate through the text content
    while (currentPos + 1 < endPos) {
      // Update the range to select a single character
      range.setStart(elem, currentPos);
      range.setEnd(elem, currentPos + 1);

      // Check if the character's bounding rectangle contains the cursor position
      if (
        range.getBoundingClientRect().left <= x &&
        range.getBoundingClientRect().right >= x &&
        range.getBoundingClientRect().top <= y &&
        range.getBoundingClientRect().bottom >= y
      ) {
        // Expand the range to select the word
        range.expand("word");
        var ret = range.toString();
        range.detach();
        return ret;
      }

      // Advance the current position
      currentPos += 1;
    }
  } else {
    // For elements with child nodes (e.g., <p>, <div>), iterate through their children
    for (var i = 0; i < elem.childNodes.length; i++) {
      // Create a range and position it within the child node's text content
      var range = elem.childNodes[i].ownerDocument.createRange();
      range.selectNodeContents(elem.childNodes[i]);

      // Check if the child node's bounding rectangle contains the cursor position
      if (
        range.getBoundingClientRect().left <= x &&
        range.getBoundingClientRect().right >= x &&
        range.getBoundingClientRect().top <= y &&
        range.getBoundingClientRect().bottom >= y
      ) {
        // Recursively call getWordAtPoint on the child node
        range.detach();
        return getWordAtPoint(elem.childNodes[i], x, y);
      } else {
        range.detach();
      }
    }
  }

  return null;
}</code>

Verwendung:

Im Ereignishandler für Ihr Mousemove-Ereignis können Sie die Funktion getWordAtPoint() wie folgt verwenden:

<code class="javascript">getWordAtPoint(e.target, e.x, e.y);</code>

Das obige ist der detaillierte Inhalt vonWie bekomme ich das Wort mit JavaScript unter den Mauszeiger?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn