JQuery का उपयोग करके क्लिपबोर्ड पर बटन कॉपी पर क्लिक करें


433

मैं क्लिप के लिए एक div के अंदर पाठ की नकल कैसे करूं? मेरे पास एक div है और एक लिंक जोड़ने की आवश्यकता है जो क्लिपबोर्ड पर पाठ जोड़ देगा। क्या इसका कोई समाधान है?

<p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>

<a class="copy-text">copy Text</a>

जब मैं कॉपी टेक्स्ट पर क्लिक करता हूं, तो मैं Ctrl+ दबा देता हूं V, इसे चिपकाया जाना चाहिए।


का संदर्भ लें stackoverflow.com/questions/400212/...
SquareCat

ट्रेलो के पास फ्लैश के बिना ऐसा करने का एक चतुर तरीका है: stackoverflow.com/questions/17527870/…
पॉल श्रेइबर

इसे देखें, stackoverflow.com/questions/22581345/… शुद्ध जावास्क्रिप्ट का उपयोग करके अपेक्षित समाधान मिला
विग्नेश चिनैयन

@MichaelScheper - कुछ उपयोगकर्ता यह समझने के लिए भी स्मार्ट हैं कि मेरी टिप्पणी, और यहां अधिकांश उत्तर चार साल पहले पोस्ट किए गए थे, जब ज़ीरोक्लिपबोर्ड, जो कि एक छोटे से फ्लैश ऐप पर आधारित था, एकमात्र क्रॉस-ब्राउज़र अनुकूल विकल्प था क्लिपबोर्ड और गोटो समाधान के साथ काम करें। आज सभी आधुनिक ब्राउज़र मूल रूप से इसका समर्थन करते हैं, इसलिए यह अब कोई मुद्दा नहीं है, लेकिन 2014 में ऐसा नहीं था
18'18

@adeneo: यकीन है, लेकिन सभी उपयोगकर्ता उस 'स्मार्ट' नहीं हैं, और आपकी टिप्पणी में अभी भी दो बदलाव हैं।
माइकल शेपर

जवाबों:


483

2016 तक संपादित करें

2016 तक, अब आप अधिकांश ब्राउज़रों में टेक्स्ट को क्लिपबोर्ड पर कॉपी कर सकते हैं क्योंकि अधिकांश ब्राउज़रों में प्रोग्राम से चयन करने की क्षमता का उपयोग करके प्रोग्राम के चयन को क्लिपबोर्ड पर कॉपी करने की क्षमता है document.execCommand("copy")

एक ब्राउज़र में कुछ अन्य कार्यों के साथ (जैसे एक नई विंडो खोलना), क्लिपबोर्ड पर प्रतिलिपि केवल एक विशिष्ट उपयोगकर्ता कार्रवाई (जैसे माउस क्लिक) के माध्यम से की जा सकती है। उदाहरण के लिए, यह एक टाइमर के माध्यम से नहीं किया जा सकता है।

यहाँ एक कोड उदाहरण है:

document.getElementById("copyButton").addEventListener("click", function() {
    copyToClipboard(document.getElementById("copyTarget"));
});

function copyToClipboard(elem) {
	  // create hidden text element, if it doesn't already exist
    var targetId = "_hiddenCopyText_";
    var isInput = elem.tagName === "INPUT" || elem.tagName === "TEXTAREA";
    var origSelectionStart, origSelectionEnd;
    if (isInput) {
        // can just use the original source element for the selection and copy
        target = elem;
        origSelectionStart = elem.selectionStart;
        origSelectionEnd = elem.selectionEnd;
    } else {
        // must use a temporary form element for the selection and copy
        target = document.getElementById(targetId);
        if (!target) {
            var target = document.createElement("textarea");
            target.style.position = "absolute";
            target.style.left = "-9999px";
            target.style.top = "0";
            target.id = targetId;
            document.body.appendChild(target);
        }
        target.textContent = elem.textContent;
    }
    // select the content
    var currentFocus = document.activeElement;
    target.focus();
    target.setSelectionRange(0, target.value.length);
    
    // copy the selection
    var succeed;
    try {
    	  succeed = document.execCommand("copy");
    } catch(e) {
        succeed = false;
    }
    // restore original focus
    if (currentFocus && typeof currentFocus.focus === "function") {
        currentFocus.focus();
    }
    
    if (isInput) {
        // restore prior selection
        elem.setSelectionRange(origSelectionStart, origSelectionEnd);
    } else {
        // clear temporary content
        target.textContent = "";
    }
    return succeed;
}
input {
  width: 400px;
}
<input type="text" id="copyTarget" value="Text to Copy"> <button id="copyButton">Copy</button><br><br>
<input type="text" placeholder="Click here and press Ctrl-V to see clipboard contents">


यहां थोड़ा और उन्नत डेमो दिया गया है: https://jsfiddle.net/jfriend00/v9g1x0o6/

और, आप एक प्री-बिल्ट लाइब्रेरी भी प्राप्त कर सकते हैं जो क्लिपबोर्ड.जे के साथ आपके लिए ऐसा करती है ।


उत्तर का पुराना, ऐतिहासिक हिस्सा

सुरक्षा कारणों से किसी भी आधुनिक ब्राउज़र द्वारा जावास्क्रिप्ट के माध्यम से क्लिपबोर्ड पर सीधे कॉपी करने की अनुमति नहीं है। सबसे आम समाधान क्लिपबोर्ड पर प्रतिलिपि बनाने के लिए एक फ्लैश क्षमता का उपयोग करना है जो केवल एक प्रत्यक्ष उपयोगकर्ता क्लिक द्वारा ट्रिगर किया जा सकता है।

जैसा कि पहले ही उल्लेख किया गया है, ज़ीरोक्लिपबोर्ड कॉपी करने के लिए फ्लैश ऑब्जेक्ट के प्रबंधन के लिए कोड का एक लोकप्रिय सेट है। मैंने इसका उपयोग किया है। यदि ब्राउज़िंग डिवाइस पर फ्लैश स्थापित किया गया है (जो मोबाइल या टैबलेट को नियंत्रित करता है), यह काम करता है।


अगले सबसे आम काम के आसपास क्लिपबोर्ड-बाउंड टेक्स्ट को एक इनपुट फ़ील्ड में रखना है, उस फ़ील्ड पर फ़ोकस ले जाएँ और उपयोगकर्ता को टेक्स्ट कॉपी करने के लिए Ctrl+ दबाने की सलाह दें C

समस्या और संभावित कार्य-क्षेत्रों की अन्य चर्चाएँ इन पूर्व स्टैक ओवरफ़्लो पोस्ट में पाई जा सकती हैं:


फ्लैश का उपयोग करने के लिए एक आधुनिक विकल्प के लिए पूछ रहे इन सवालों को बहुत सारे सवाल उठे हैं और समाधान के साथ कोई जवाब नहीं है (शायद इसलिए कि कोई भी मौजूद नहीं है):


इंटरनेट एक्सप्लोरर और फ़ायरफ़ॉक्स में क्लिपबोर्ड तक पहुंचने के लिए गैर-मानक एपीआई होते थे, लेकिन उनके अधिक आधुनिक संस्करणों ने उन तरीकों (शायद सुरक्षा कारणों से) को हटा दिया है।


सबसे आम क्लिपबोर्ड समस्याओं को हल करने के लिए "सुरक्षित" तरीके से आने की कोशिश करने के लिए एक नवजात मानकों का प्रयास है (शायद फ्लैश समाधान की आवश्यकता की तरह एक विशिष्ट उपयोगकर्ता कार्रवाई की आवश्यकता होती है), और ऐसा लगता है कि इसे नवीनतम में आंशिक रूप से लागू किया जा सकता है। फ़ायरफ़ॉक्स और क्रोम के संस्करण, लेकिन मैंने अभी तक इसकी पुष्टि नहीं की है।


1
क्लिपबोर्ड.जेएस को इस संपादित पोस्ट में जोड़ा गया था। यह एक अच्छी उपयोगिता है जिसे मैंने इस प्रश्न के उत्तर के रूप में अगस्त 2015 में शामिल किया था
एक कोडर

1
@acoder - क्लिपबोर्ड समर्थन नियमित रूप से बदलता रहा है। उदाहरण के लिए, फ़ायरफ़ॉक्स ने हाल ही में (देर से 2015) document.execCommand("copy")पर्याप्त परिस्थितियों में इसके लिए उपयोग करने पर भरोसा करने में सक्षम किया। इसलिए, मैं अपने उत्तर को अद्यतित रखने का प्रयास कर रहा हूं (जो मूल रूप से लगभग 2 साल पहले लिखा गया था)। हमारे पास अभी भी पाठ के पूर्व-चयन के अलावा सफारी के लिए एक विश्वसनीय समाधान नहीं है और उपयोगकर्ता को Ctrl + C को मैन्युअल रूप से दबाने के लिए कह रहा है, लेकिन कम से कम प्रगति कहीं और की जा रही है।
19 जून को jfriend00

1
यहाँ क्लिपबोर्ड एपीआई के लिए समर्थन के लिए एक लिंक दिया गया है: caniuse.com/#feat=clipboard
L84

2
FYI करें, सफ़ारी रिलीज़ नोट्स के इस सेट के अनुसार , ऐसा प्रतीत होता है कि Safari 10 अब समर्थन करता है document.execCommand("copy")इसलिए इस कोड को अब Safari 10. में काम करना चाहिए
jfriend00

1
@sebastiangodelet - सार्वजनिक डोमेन।
4

641

अद्यतन 2020 : इस समाधान का उपयोग करता है execCommand। हालाँकि यह सुविधा इस उत्तर को लिखने के समय ठीक थी, अब इसे अप्रचलित माना जाता है । यह अभी भी कई ब्राउज़रों पर काम करेगा, लेकिन इसका उपयोग हतोत्साहित किया जा सकता है क्योंकि समर्थन को गिरा दिया जा सकता है।

एक और गैर-फ्लैश तरीका है ( क्लिपबोर्ड एपीआई के अलावा jfriend00 के उत्तर में उल्लिखित )। आपको पाठ का चयन करने की आवश्यकता है और फिर क्लिपबोर्ड पर कॉपी करने के लिए कमांड निष्पादित करेंcopy जो भी पाठ वर्तमान में पृष्ठ पर चुना गया है।

उदाहरण के लिए, यह फ़ंक्शन क्लिपबोर्ड में पारित तत्व की सामग्री को कॉपी करेगा ( पॉइंटज़ेरोटो से टिप्पणियों में सुझाव के साथ अपडेट किया गया है ):

function copyToClipboard(element) {
    var $temp = $("<input>");
    $("body").append($temp);
    $temp.val($(element).text()).select();
    document.execCommand("copy");
    $temp.remove();
}

यह इस तरह काम करता है:

  1. एक अस्थायी रूप से छिपा हुआ पाठ क्षेत्र बनाता है।
  2. तत्व की सामग्री को उस पाठ क्षेत्र में कॉपी करता है।
  3. पाठ फ़ील्ड की सामग्री का चयन करता है।
  4. कमांड कॉपी को निष्पादित करता है जैसे document.execCommand("copy"):।
  5. अस्थायी पाठ फ़ील्ड निकालता है।

आप यहां क्विक डेमो देख सकते हैं:

function copyToClipboard(element) {
  var $temp = $("<input>");
  $("body").append($temp);
  $temp.val($(element).text()).select();
  document.execCommand("copy");
  $temp.remove();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p id="p1">P1: I am paragraph 1</p>
<p id="p2">P2: I am a second paragraph</p>
<button onclick="copyToClipboard('#p1')">Copy P1</button>
<button onclick="copyToClipboard('#p2')">Copy P2</button>
<br/><br/><input type="text" placeholder="Paste here for test" />

मुख्य मुद्दा यह है कि सभी ब्राउज़र इस समय इस सुविधा का समर्थन नहीं करते हैं, लेकिन आप इसका उपयोग मुख्य लोगों में से कर सकते हैं:

  • क्रोम 43
  • इंटरनेट एक्सप्लोरर 10
  • फ़ायरफ़ॉक्स 41
  • सफ़ारी १०

अद्यतन 1: यह शुद्ध जावास्क्रिप्ट समाधान (कोई jQuery) के साथ भी प्राप्त किया जा सकता है:

function copyToClipboard(elementId) {

  // Create a "hidden" input
  var aux = document.createElement("input");

  // Assign it the value of the specified element
  aux.setAttribute("value", document.getElementById(elementId).innerHTML);

  // Append it to the body
  document.body.appendChild(aux);

  // Highlight its content
  aux.select();

  // Copy the highlighted text
  document.execCommand("copy");

  // Remove it from the body
  document.body.removeChild(aux);

}
<p id="p1">P1: I am paragraph 1</p>
<p id="p2">P2: I am a second paragraph</p>
<button onclick="copyToClipboard('p1')">Copy P1</button>
<button onclick="copyToClipboard('p2')">Copy P2</button>
<br/><br/><input type="text" placeholder="Paste here for test" />

ध्यान दें कि हम बिना # के आईडी पास करते हैं।

जैसा कि नीचे दिए गए टिप्पणियों में मडज़ोहन ने बताया, कुछ मामलों में Google क्रोम के 64-बिट संस्करण के साथ कुछ अजीब समस्या है (फ़ाइल को स्थानीय रूप से चलाना)। यह समस्या ऊपर के गैर-jQuery समाधान के साथ तय की गई लगती है।

मडज़ोहन ने सफारी में कोशिश की और समाधान ने काम किया लेकिन उपयोग document.execCommand('SelectAll')करने के बजाय .select()(जैसा कि चैट में और नीचे टिप्पणी में निर्दिष्ट किया गया है)।

जैसा कि पॉइंटजेरोव्यू टिप्पणियों में बताता है , कोड में सुधार किया जा सकता है ताकि यह एक सफलता / विफलता परिणाम लौटाए। आप इस jsFiddle पर एक डेमो देख सकते हैं ।


अद्यतन: कॉपी प्रारूप बनाने के बाद कॉपी करना

जैसा कि एक उपयोगकर्ता ने StackOverflow के स्पैनिश संस्करण में बताया है , ऊपर दिए गए समाधान पूरी तरह से काम करते हैं यदि आप किसी तत्व की सामग्री को शाब्दिक रूप से कॉपी करना चाहते हैं, लेकिन वे उस महान काम नहीं करते हैं यदि आप कॉपी किए गए पाठ को प्रारूप के साथ पेस्ट करना चाहते हैं (जैसा कि यह एक में कॉपी किया जाता है input type="text", प्रारूप "खो गया है")।

इसके लिए एक समाधान एक सामग्री संपादन योग्य में divकॉपी करना और फिर execCommandएक समान तरीके से उपयोग करके कॉपी करना होगा । यहाँ एक उदाहरण है - कॉपी बटन पर क्लिक करें और फिर नीचे सामग्री संपादन योग्य बॉक्स में पेस्ट करें:

function copy(element_id){
  var aux = document.createElement("div");
  aux.setAttribute("contentEditable", true);
  aux.innerHTML = document.getElementById(element_id).innerHTML;
  aux.setAttribute("onfocus", "document.execCommand('selectAll',false,null)"); 
  document.body.appendChild(aux);
  aux.focus();
  document.execCommand("copy");
  document.body.removeChild(aux);
}
#target {
  width:400px;
  height:100px;
  border:1px solid #ccc;
}
<p id="demo"><b>Bold text</b> and <u>underlined text</u>.</p>
<button onclick="copy('demo')">Copy Keeping Format</button> 

<div id="target" contentEditable="true"></div>

और jQuery में, यह इस तरह होगा:

function copy(selector){
  var $temp = $("<div>");
  $("body").append($temp);
  $temp.attr("contenteditable", true)
       .html($(selector).html()).select()
       .on("focus", function() { document.execCommand('selectAll',false,null); })
       .focus();
  document.execCommand("copy");
  $temp.remove();
}
#target {
  width:400px;
  height:100px;
  border:1px solid #ccc;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<p id="demo"><b>Bold text</b> and <u>underlined text</u>.</p>
<button onclick="copy('#demo')">Copy Keeping Format</button> 

<div id="target" contentEditable="true"></div>


5
अजीब ... यहाँ यह काम करता है, लेकिन मैं इसे स्थानीय रूप से 0o jquery-1.11.3 क्रोम 43.0.2357.130 (64-बिट)
Madzohan

2
@ दमोजान ओके, मैं इस मुद्दे को फिर से पेश करने में सक्षम था। यह अजीब है क्योंकि मैं केवल 64-बिट क्रोम पर इसे स्थानीय (फ़ाइल: //) पर पुन: पेश करने में सक्षम था। मुझे एक त्वरित समाधान भी मिला जो मेरे लिए काम करता है: jQuery के बजाय सादे जावास्क्रिप्ट का उपयोग करना। मैं उस कोड के साथ उत्तर को अपडेट करूंगा। कृपया इसे जांचें और मुझे बताएं कि क्या यह आपके लिए काम करता है।
अल्वारो मोंटोरो

1
FWIW - document.execCommand ("copy") एक बूलियन (IE, क्रोम, सफारी) का संकेत देता है कि क्या कॉपी सफल थी। इसका उपयोग विफलता पर एक त्रुटि संदेश प्रदर्शित करने के लिए किया जा सकता है। फ़ायरफ़ॉक्स विफलता पर एक अपवाद फेंकता है (कम से कम 39 में), त्रुटि को संभालने के लिए एक कोशिश / पकड़ की आवश्यकता होती है।
प्वाइंटजेरो ट्व्यू जूल 27'15

3
यह मेरे लिए तब तक काम नहीं आया जब तक मैंने यह सुनिश्चित नहीं किया कि कॉल के aux.style.position = "fixed"; aux.style.top = 0;ऊपर निम्नलिखित पंक्तियों को जोड़कर औक्स पृष्ठ पर दिखाई दे appendChild
अर्किस

7
मूल jQuery कार्यान्वयन लाइन ब्रेक को संरक्षित करने में विफल रहता है, क्योंकि यह एक INPUT तत्व का उपयोग कर रहा है। इसके बजाय एक TEXTAREA का उपयोग करना।
थोमसफूच्स

37

क्लिपबोर्ड.जेएस एक अच्छी उपयोगिता है जो फ्लैश के उपयोग के बिना क्लिपबोर्ड पर पाठ या एचटीएमएल डेटा की प्रतिलिपि बनाने की अनुमति देता है। इसका उपयोग करना बहुत आसान है; बस .js को शामिल करें और कुछ इस तरह का उपयोग करें:

<button id='markup-copy'>Copy Button</button>

<script>
    document.getElementById('markup-copy').addEventListener('click', function() {
        clipboard.copy({
            'text/plain': 'Markup text. Paste me into a rich text editor.',
            'text/html': '<i>here</i> is some <b>rich text</b>'
        }).then(
            function(){console.log('success'); },
            function(err){console.log('failure', err);
        });
    });
</script>

क्लिपबोर्ड.जेएस गीथहब पर भी है

15 जनवरी 2016 को संपादित करें: अगस्त 2015 में पोस्ट किए गए मेरे उत्तर में उसी एपीआई को संदर्भित करने के लिए शीर्ष उत्तर आज संपादित किया गया था । पिछला पाठ उपयोगकर्ताओं को ज़ीरोक्लिपबोर्ड का उपयोग करने का निर्देश दे रहा था। बस यह स्पष्ट होना चाहता हूं कि मैंने इसे jfriend00 के जवाब से नहीं, बल्कि दूसरे तरीके से घेर लिया।


क्लिपबोर्ड-जेएस - पदावनत किया गया है लेखक का संदेश: कृपया github.com/lgarron/clipboard-polyfill पर जाएं
येवगेनी अफानसेयेव

26

सादगी परम विशेषज्ञता है।
यदि आप नहीं चाहते कि टेक्स्ट-टू-बी-कॉपिड दिखाई दे:

jQuery:

$('button.copyButton').click(function(){
    $(this).siblings('input.linkToCopy').select();      
    document.execCommand("copy");
});

HTML:

<button class="copyButton">click here to copy</button>
<input class="linkToCopy" value="TEXT TO COPY"
style="position: absolute; z-index: -999; opacity: 0;" />

ipad पर काम करने के लिए प्रतीत नहीं होता है, परीक्षण नहीं किया है, लेकिन एक सुझाव दिया समाधान यहाँ है: stackoverflow.com/a/34046084
user1063287

यह मेरे लिए काम करता है, लेकिन अगर कॉपी किए जाने वाले पाठ में कैरेज रिटर्न होता है, तो आप इसके बजाय एक textarea का उपयोग कर सकते हैं।
एलेक्स

13

लाइन ब्रेक के साथ (अलवारो मोंटोरो से उत्तर का विस्तार)

var ClipboardHelper = {

    copyElement: function ($element)
    {
       this.copyText($element.text())
    },
    copyText:function(text) // Linebreaks with \n
    {
        var $tempInput =  $("<textarea>");
        $("body").append($tempInput);
        $tempInput.val(text).select();
        document.execCommand("copy");
        $tempInput.remove();
    }
};

ClipboardHelper.copyText('Hello\nWorld');
ClipboardHelper.copyElement($('body h1').first());

9

आप इस कोड का उपयोग क्लिपबोर्ड में पृष्ठ में प्रतिलिपि इनपुट मान के लिए एक बटन पर क्लिक करके कर सकते हैं

यह Html है

<input type="text" value="xxx" id="link" class="span12" />
<button type="button" class="btn btn-info btn-sm" onclick="copyToClipboard('#link')">
    Copy Input Value
</button>

फिर इस html के लिए, हमें इस JQuery कोड का उपयोग करना चाहिए

function copyToClipboard(element) {
    $(element).select();
    document.execCommand("copy");
}

यह इस प्रश्न का सबसे सरल समाधान है


8

फ्लैश या किसी अन्य आवश्यकताओं के बिना भी बेहतर दृष्टिकोण क्लिपबोर्ड हैजेएस । आपको बस data-clipboard-target="#toCopyElement"किसी भी बटन को जोड़ने की जरूरत है , इसे इनिशियलाइज़ करें new Clipboard('.btn');और यह DOM के कंटेंट को id toCopyElementसे क्लिपबोर्ड पर कॉपी करेगा। यह एक स्निपेट है जो आपके प्रश्न में दिए गए पाठ को लिंक के माध्यम से कॉपी करता है।

एक सीमा हालांकि यह है कि यह सफारी पर काम नहीं करता है, लेकिन यह मोबाइल ब्राउज़र सहित अन्य सभी ब्राउज़र पर काम करता है क्योंकि यह फ्लैश का उपयोग नहीं करता है

$(function(){
  new Clipboard('.copy-text');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/clipboard.js/1.5.12/clipboard.min.js"></script>

<p id="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>

<a class="copy-text" data-clipboard-target="#content" href="#">copy Text</a>


5
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link href="css/index.css" rel="stylesheet" />
    <script src="js/jquery-2.1.4.min.js"></script>
    <script>
        function copy()
        {
            try
            {
                $('#txt').select();
                document.execCommand('copy');
            }
            catch(e)
            {
                alert(e);
            }
        }
    </script>
</head>
<body>
    <h4 align="center">Copy your code</h4>
    <textarea id="txt" style="width:100%;height:300px;"></textarea>
    <br /><br /><br />
    <div align="center"><span class="btn-md" onclick="copy();">copy</span></div>
</body>
</html>

1
यह केवल Textarea और textbox के लिए उपयोग किया जा सकता है।
विग्नेश चिनैयन

5
<div class="form-group">
    <label class="font-normal MyText">MyText to copy</label>&nbsp;
    <button type="button" class="btn btn-default btn-xs btnCopy" data="MyText">Copy</button>
</div>


$(".btnCopy").click(function () {
        var element = $(this).attr("data");
        copyToClipboard($('.' + element));
  });

function copyToClipboard(element) {
    var $temp = $("<input>");
    $("body").append($temp);
    $temp.val($(element).text()).select();
    document.execCommand("copy");
    $temp.remove();
}

अच्छा काम है। हो सकता .addClass("hidden")है कि <input>टैग में जोड़ें यह ब्राउज़र में कभी नहीं दिखाया गया है?
रोलैंड

5

यह बहुत महत्वपूर्ण है कि इनपुट फ़ील्ड में नहीं है display: none। ब्राउज़र पाठ का चयन नहीं करेगा और इसलिए कॉपी नहीं किया जाएगा। opacity: 0समस्या को ठीक करने के लिए 0px की चौड़ाई के साथ उपयोग करें ।


4

यह सामग्री को कॉपी करने का सबसे सरल तरीका है

 <div id="content"> Lorepm ispum </div>
 <button class="copy" title="content">Copy Sorce</button>

function SelectContent(element) {
                        var doc = document
                            , text = doc.getElementById(element)
                            , range, selection
                        ;    
                        if (doc.body.createTextRange) {
                            range = document.body.createTextRange();
                            range.moveToElementText(text);
                            range.select();
                        } else if (window.getSelection) {
                            selection = window.getSelection();        
                            range = document.createRange();
                            range.selectNodeContents(text);
                            selection.removeAllRanges();
                            selection.addRange(range);

                        }
                         document.execCommand('Copy');
                    }
                    $(".copy").click(function(){

                         SelectContent( $(this).attr('title'));
                    });

4

jQuery का सरल समाधान।

उपयोगकर्ता के क्लिक से ट्रिगर किया जाना चाहिए।

$("<textarea/>").appendTo("body").val(text).select().each(function () {
            document.execCommand('copy');
        }).remove();

3

आप आसानी से कॉपी लक्ष्य को महसूस करने के लिए इस दायित्व का उपयोग कर सकते हैं!

https://clipboardjs.com/

क्लिपबोर्ड पर पाठ की प्रतिलिपि बनाना कठिन नहीं होना चाहिए। इसे लोड करने के लिए दर्जनों या कॉन्फ़िगर सैकड़ों KB की आवश्यकता नहीं होनी चाहिए। लेकिन सभी के अधिकांश, यह फ्लैश या किसी भी फूला हुआ रूपरेखा पर निर्भर नहीं होना चाहिए।

यही कारण है कि क्लिपबोर्ड। Js मौजूद है।

या

https://github.com/zeroclipboard/zeroclipboard

http://zeroclipboard.org/

ZeroClipboard लाइब्रेरी एक अदृश्य एडोब फ्लैश मूवी और एक जावास्क्रिप्ट इंटरफ़ेस का उपयोग करके क्लिपबोर्ड पर टेक्स्ट को कॉपी करने का एक आसान तरीका प्रदान करता है।


2

कॉपी करने के लिए टेक्स्ट टेक्स्ट इनपुट में है, जैसे: <input type="text" id="copyText" name="copyText"> और, बटन पर क्लिक करें ऊपर के टेक्स्ट को क्लिपबोर्ड पर कॉपी करना चाहिए, इसलिए बटन ऐसा है: <button type="submit" id="copy_button" data-clipboard-target='copyText'>Copy</button> आपकी स्क्रिप्ट इस तरह होनी चाहिए:

<script language="JavaScript">
$(document).ready(function() {
var clip = new ZeroClipboard($("#copy_button"), {
  moviePath: "ZeroClipboard.swf"
}); 
});

</script>

CDN फ़ाइलों के लिए

ध्यान दें : ZeroClipboard.swfऔर ZeroClipboard.js"फ़ाइल उसी फ़ोल्डर में होनी चाहिए जिस तरह से आपकी फ़ाइल इस कार्यक्षमता का उपयोग कर रही है, या आपको इसे शामिल करना होगा जैसे हम <script src=""></script>अपने पृष्ठों पर शामिल करते हैं ।


6
फ्लैश जियोसिटी का रास्ता बन रहा है।
एक कोडर

2

प्रस्तावित उत्तरों में से अधिकांश एक अतिरिक्त अस्थायी छिपा इनपुट तत्व बनाते हैं। क्योंकि आजकल अधिकांश ब्राउज़र div कंटेंट एडिट का समर्थन करते हैं, मैं एक ऐसे समाधान का प्रस्ताव करता हूं जो छिपे हुए तत्व (ओं) को नहीं बनाता है, पाठ स्वरूपण को संरक्षित करता है और शुद्ध जावास्क्रिप्ट या jQuery लाइब्रेरी का उपयोग करता है।

यहाँ उन कोडों की सबसे छोटी पंक्तियों का उपयोग करके एक न्यूनतम कंकाल कार्यान्वयन है जो मैं सोच सकता था:

//Pure javascript implementation:
document.getElementById("copyUsingPureJS").addEventListener("click", function() {
  copyUsingPureJS(document.getElementById("copyTarget"));
  alert("Text Copied to Clipboard Using Pure Javascript");
});

function copyUsingPureJS(element_id) {
  element_id.setAttribute("contentEditable", true);
  element_id.setAttribute("onfocus", "document.execCommand('selectAll',false,null)");
  element_id.focus();
  document.execCommand("copy");
  element_id.removeAttribute("contentEditable");
  
}

//Jquery:
$(document).ready(function() {
  $("#copyUsingJquery").click(function() {
    copyUsingJquery("#copyTarget");
  });
 

  function copyUsingJquery(element_id) {
    $(element_id).attr("contenteditable", true)
      .select()
      .on("focus", function() {
        document.execCommand('selectAll', false, null)
      })
      .focus()
    document.execCommand("Copy");
    $(element_id).removeAttr("contenteditable");
     alert("Text Copied to Clipboard Using jQuery");
  }
});
#copyTarget {
  width: 400px;
  height: 400px;
  border: 1px groove gray;
  color: navy;
  text-align: center;
  box-shadow: 0 4px 8px 0 gray;
}

#copyTarget h1 {
  color: blue;
}

#copyTarget h2 {
  color: red;
}

#copyTarget h3 {
  color: green;
}

#copyTarget h4 {
  color: cyan;
}

#copyTarget h5 {
  color: brown;
}

#copyTarget h6 {
  color: teal;
}

#pasteTarget {
  width: 400px;
  height: 400px;
  border: 1px inset skyblue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="copyTarget">
  <h1>Heading 1</h1>
  <h2>Heading 2</h2>
  <h3>Heading 3</h3>
  <h4>Heading 4</h4>
  <h5>Heading 5</h5>
  <h6>Heading 6</h6>
  <strong>Preserve <em>formatting</em></strong>
  <br/>
</div>

<button id="copyUsingPureJS">Copy Using Pure JavaScript</button>
<button id="copyUsingJquery">Copy Using jQuery</button>
<br><br> Paste Here to See Result
<div id="pasteTarget" contenteditable="true"></div>


2

क्लिपबोर्ड-पॉलीफ़िल लाइब्रेरी आधुनिक वादा-आधारित अतुल्यकालिक क्लिपबोर्ड एपीआई के लिए एक पॉलीफ़िल है।

CLI में स्थापित करें:

npm install clipboard-polyfill 

जेएस फ़ाइल में क्लिपबोर्ड के रूप में आयात

window.clipboard = require('clipboard-polyfill');

उदाहरण

मैं इसे बंडल में उपयोग कर रहा हूं require("babel-polyfill");और क्रोम 67 पर इसका परीक्षण किया है। सभी उत्पादन के लिए अच्छा है।


1

html कोड यहाँ

    <input id="result" style="width:300px"/>some example text
    <button onclick="copyToClipboard('result')">Copy P1</button>
    <input type="text" style="width:400px" placeholder="Paste here for test" />

जेएस कोड:

     function copyToClipboard(elementId) {

                      // Create a "hidden" input
                      var aux = document.createElement("input");

                      aux.setAttribute("value", document.getElementById(elementId).value);
                      // Append it to the body
                      document.body.appendChild(aux);
                      // Highlight its content
                      aux.select();
                      // Copy the highlighted text
                      document.execCommand("copy");
                      // Remove it from the body
                      document.body.removeChild(aux);
                    }

इसे बदलें: .value to .innerHTML
Omar N शामली

1

आप HTML तत्व के पाठ के अलावा एक अलग पाठ कॉपी कर सकते हैं।

        var copyToClipboard = function (text) {
            var $txt = $('<textarea />');

            $txt.val(text)
                .css({ width: "1px", height: "1px" })
                .appendTo('body');

            $txt.select();

            if (document.execCommand('copy')) {
                $txt.remove();
            }
        };

0

शुद्ध जेएस, युग्मित वर्गों "सामग्री - कॉपी बटन" के लिए इनलाइन पर क्लिक किए बिना। अधिक आरामदायक होगा, यदि आपके पास कई तत्व हैं)

(function(){

/* Creating textarea only once, but not each time */
let area = document.createElement('textarea');
document.body.appendChild( area );
area.style.display = "none";

let content = document.querySelectorAll('.js-content');
let copy    = document.querySelectorAll('.js-copy');

for( let i = 0; i < copy.length; i++ ){
  copy[i].addEventListener('click', function(){
    area.style.display = "block";
    /* because the classes are paired, we can use the [i] index from the clicked button,
    to get the required text block */
    area.value = content[i].innerText;
    area.select();
    document.execCommand('copy');   
    area.style.display = "none";

    /* decorative part */
    this.innerHTML = 'Cop<span style="color: red;">ied</span>';
    /* arrow function doesn't modify 'this', here it's still the clicked button */
    setTimeout( () => this.innerHTML = "Copy", 2000 );
  });
}

})();
hr { margin: 15px 0; border: none; }
<span class="js-content">1111</span>
<button class="js-copy">Copy</button>
<hr>
<span class="js-content">2222</span>
<button class="js-copy">Copy</button>
<hr>
<span class="js-content">3333</span>
<button class="js-copy">Copy</button>

पुराने ब्राउज़र का समर्थन:


-1

दोनों एक आकर्षण की तरह काम करेंगे :),

JavaScript:

function CopyToClipboard(containerid) {
if (document.selection) { 
    var range = document.body.createTextRange();
    range.moveToElementText(document.getElementById(containerid));
    range.select().createTextRange();
    document.execCommand("copy"); 

} else if (window.getSelection) {
    var range = document.createRange();
     range.selectNode(document.getElementById(containerid));
     window.getSelection().addRange(range);
     document.execCommand("copy");
     alert("text copied") 
}}

Html में भी,

<button id="button1" onclick="CopyToClipboard('div1')">Click to copy</button>

<div id="div1" >Text To Copy </div>

<textarea placeholder="Press ctrl+v to Paste the copied text" rows="5" cols="20"></textarea>

JQUERY: https://paulund.co.uk/jquery-copy-clipboard

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.