2009-07-31 19 views
9

W języku JavaScript, w jaki sposób można wybrać tekst na stronie internetowej, skopiuj go (przez Control + C, Command + C lub Edycja Kopiuj) i JavaScript dołączyć linię lub dwa do schowek, więc gdy użytkownik wklei się, wyświetlana jest zawartość, a także dodatkowa linia?Jak automatycznie dołączyć tekst do tekstu skopiowanego za pomocą JavaScriptu

Czy byłoby to możliwe tylko w obrębie określonych <div> s witryny? Jeśli tak to jak?

+0

Fakt zabawa: [fox aktualności] (http://www.foxnews.com/scitech/2012/03/0 6/asteroid-to-buzz-by-earth-next-year-to-call-insurance-agent /) robi to całkiem bezproblemowo. (spróbuj skopiować elementy CTRL) – ZJR

Odpowiedz

1

Możesz użyć kombinacji execCommand("Copy") i execCommand("Paste"), aby osiągnąć to, co chcesz.

To powinno pomóc:

http://www.geekpedia.com/tutorial126_Clipboard-cut-copy-and-paste-with-JavaScript.html

+0

Problem polega na tym, jak można wykryć, kiedy użytkownik coś kopiuje? Wtedy mogłem dowiedzieć się, jak to zrobić z tej strony, którą mi wysłałeś. –

+6

jQuery ma znakomite wbudowane wykrywanie kopiowania/wklejania: http://www.devcurry.com/2009/07/detect-copy-paste-and-cut-operations-on.html –

1

natknąłem to na miejscu faqs.org [1] i był zbyt ciekawy. Używają javascript od tynt.com. Znalazłem także odpowiedź ask-metafilter [2] wskazującą na inny javascript. Powinny być dobrym punktem wyjścia. Nie wypracowałem tego jeszcze, ale spodziewam się, że możesz przyłączyć detektory zdarzeń tylko do danego elementu div.

  1. http://www.faqs.org/faqs/tv/sat-night-live/deep-thoughts/
7

I stworzył skrypt, który wykonuje to (i here's blog post o tym):

<script> 
$("body").bind('copy', function (e) { 
    if (typeof window.getSelection == "undefined") return; //IE8 or earlier... 

    var body_element = document.getElementsByTagName('body')[0]; 
    var selection = window.getSelection(); 

    //if the selection is short let's not annoy our users 
    if (("" + selection).length < 30) return; 

    //create a div outside of the visible area 
    var newdiv = document.createElement('div'); 
    newdiv.style.position = 'absolute'; 
    newdiv.style.left = '-99999px'; 
    body_element.appendChild(newdiv); 
    newdiv.appendChild(selection.getRangeAt(0).cloneContents()); 

    //we need a <pre> tag workaround 
    //otherwise the text inside "pre" loses all the line breaks! 
    if (selection.getRangeAt(0).commonAncestorContainer.nodeName == "PRE") { 
     newdiv.innerHTML = "<pre>" + newdiv.innerHTML + "</pre>"; 
    } 

    newdiv.innerHTML += "<br /><br />Read more at: <a href='" 
     + document.location.href + "'>" 
     + document.location.href + "</a> &copy; MySite.com"; 

    selection.selectAllChildren(newdiv); 
    window.setTimeout(function() { body_element.removeChild(newdiv); }, 200); 
}); 
</script> 
Powiązane problemy