2016-06-24 2 views
0

Ich schreibe eine Chrome-Erweiterung, die einen Klick-Handler für ausgewählten Text verwendet, um den ausgewählten Text zu ersetzen. Grundsätzlich Wörter wechseln.Ersetzen eines bestimmten Worts auf einer Webseite (nur eine Wortinstanz, nicht alle)

Der Kontextmenühandler empfängt den ausgewählten Text, aber nicht sein Element oder HTML. Bedeutung Ich habe keinen Zugriff auf die spezifische Instanz des Textes, auf den der Benutzer geklickt hat, aber ich weiß, was es ist.

konnte ich die gesamte Seite für den ausgewählten Text suchen, aber Worte oft mehr als einmal in einer Webseite, und ich würde nur eine der Wort Instanzen

Zum Beispiel ersetzen möge,

<div id="One"> 
    This is a text 
</div> 
<div id="Two"> 
    This is another text 
</div> 

Ich muss unterscheiden zwischen einem Klick, wenn das Wort "Text" auf Div Eins ausgewählt ist und einem Klick, wenn das Wort "Text" auf Div Zwei ausgewählt ist.

Gibt es eine Möglichkeit, dies zu tun?

(Das nächste Problem natürlich wird zwischen denselben Worten in dem gleichen Elemente zu unterscheiden sein, aber ich bin mir nicht sicher, ob das überhaupt möglich ist)

+2

Ihre HTML als Beispiel würde so etwas wie diese Hilfe überhaupt: 'document.querySelector ('body'). Onclick = Funktion angeklickt (Ereignis) { if (event.target.textContent.match (/ text /)) { Warnung ('Text wurde in' + event.target gefunden .Ich würde); } } ' – socketwiz

+0

Haben Sie versucht,' Document.querySelector() '-' innerHTML' zu verwenden? Diese Eigenschaft bietet eine einfache Möglichkeit, den Inhalt eines Elements vollständig zu ersetzen. Hier ist die Dokumentation für weitere Informationen: https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelector –

+0

Ich bekam schließlich die 'window.getSelection(). FocusNode' bei Mausklicks. Das ist der zuverlässigste Weg, den ich gefunden habe. Danke für Ihre Hilfe! – Nitay

Antwort

0

ich window.getSelection() wie so am Ende mit:

var selectedNode = $(window.getSelection().focusNode); 
var textToReplace = window.getSelection().toString(); 

var replaced = selectedNode.html().replace(textToReplace, newText); 
selectedNode.html(replaced); 

ich brauchte die Auswahl an jedem Klick zu bekommen, so dass ich auf dem Click-Ereignis registriert:

$(document).ready(function() { 
    $(document).click(function clicked(event) { 
     RefreshSelection(); 
    }); 
});