2011-01-17 15 views
34

Piszę dodatek do Firefoksa uruchamiany za każdym razem, gdy podświetlone jest słowo. Potrzebuję jednak skryptu, który wykrywa, kiedy słowo jest podświetlone, i utknąłem. Przykładem może być nytimes.com (podczas czytania artykułu i podświetlenia słowa pojawia się ikona referencyjna). Jednak skrypt nytimes.com jest bardzo złożony. Mam 16 lat i niewiele programisty, więc jest to zdecydowanie poza moją ligą.Javascript: Jak wykrywać, czy słowo jest podświetlone?

Odpowiedz

2

Oto scenariusz:

<script language=javascript> 
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> 

Courtesy of Code Toad:

http://www.codetoad.com/javascript_get_selected_text.asp

W twoim przypadku, to chcesz nazwać ten skrypt po dokonaniu wyboru, a następnie może przetwarzać go w dowolny sposób, za pomocą żądania AJAX, aby uzyskać odpowiednie informacje, na przykład, jak to prawdopodobnie robi NYtimes.

+3

Ciągle widzę tego kodu na SO, a to źle: okno '. getSelection() 'zwraca obiekt' Selection', a nie ciąg znaków. –

+0

@ Nie chroń całej prawdy. Obiekt ma metodę toString(). Kiedy łańcuch jest oczekiwany, zwracany jest ciąg znaków, w przeciwnym razie, gdy wskażesz obiekt, zostanie zwrócony. https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection –

+0

@TedCohen: To prawda, że ​​obiekt 'Selection' ma rozsądną implementację' toString() ', ale reszta twojego komentarz nie ma sensu: obiekt 'Selection' jest zawsze zwracany, jeśli istnieje' window.getSelection' (co robi we wszystkich nowoczesnych przeglądarkach). –

51

Najprostszym sposobem wykonania tej czynności jest wykrycie zdarzeń w dokumentach i sprawdzenie, czy wybrano dowolny tekst. Następujące będą działać we wszystkich głównych przeglądarkach.

Przykład: 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; 
+2

Ale co, jeśli chcesz wykryć, czy wybrane jest określone słowo? Powiedzmy, że masz 'foo' na stronie wiele razy, a użytkownik wybiera' foo' skąd wiesz, które ze słów wybrał użytkownik? – Jespertheend

0

Korzystanie rangy.js i jQuery:

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

użyć poniższy kod

(function() { 
     "use strict"; 
     var showSelectedText = function (e) { 
      var text = ''; 
      if (window.getSelection) { 
       text = window.getSelection(); 
      } else if (document.getSelection) { 
       text = document.getSelection(); 
      } else if (document.selection) { 
       text = document.selection.createRange().text; 
      } 

      console.log(text.toString()); 
     } 

     document.onmouseup = showSelectedText; 
     if (!document.all) { 
      document.captureEvents(Event.MOUSEUP); 
     } 

})(); 
Powiązane problemy