ボタンをクリックして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と、貼り付ける必要があります。



Trelloには、フラッシュなしでこれを行うための巧妙な方法があります。stackoverflow.com/ questions / 17527870 /
Paul Schreiber

これを参照してください、stackoverflow.com
/ questions / 22581345 /…

@MichaelScheper-一部のユーザーは、私のコメントとここでのほとんどの回答が4年以上前に投稿されたことに気付くほど賢いです。小さなFlashアプリに基づいたzeroclipboardが、クロスブラウザで実行可能な唯一のオプションでした。クリップボードとgotoソリューションで作業します。今日、すべての最近のブラウザーはこれをネイティブでサポートしているため、問題ではなくなりましたが、2014年はそうではありませんでした
adeneo

@adeneo:もちろんですが、すべてのユーザーが「賢い」わけではありません。コメントには2つの賛成票があります。
Michael Scheper、2018年

回答:


483

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/

また、clipboard.jsを使用してこれを行うビルド済みライブラリを取得することもできます。


答えの古い、歴史的な部分

セキュリティ上の理由から、JavaScriptを介してクリップボードに直接コピーすることは、最新のブラウザでは許可されていません。最も一般的な回避策は、Flash機能を使用して、直接のユーザークリックによってのみトリガーできるクリップボードにコピーすることです。

すでに述べたように、ZeroClipboardは、コピーを行うためにFlashオブジェクトを管理するための一般的なコードのセットです。私はそれを使いました。Flashが閲覧デバイス(モバイルまたはタブレットを除外する)にインストールされている場合、Flashは機能します。


次に最も一般的な回避策は、クリップボードにバインドされたテキストを入力フィールドに配置し、そのフィールドにフォーカスを移動し、Ctrl+ Cを押してテキストをコピーするようユーザーにアドバイスすることです。

この問題に関する他の議論と考えられる回避策は、これらの以前のスタックオーバーフローの投稿にあります。


Flashを使用する代わりに最新の方法を求めるこれらの質問には、多くの質問の賛成票があり、解決策はありません(おそらく存在しないため)。


Internet ExplorerとFirefoxには、クリップボードにアクセスするための非標準のAPIがありましたが、それらの最新バージョンでは、これらのメソッドが(おそらくセキュリティ上の理由で)非推奨になっています。


最も一般的なクリップボードの問題(おそらくFlashソリューションのような特定のユーザーアクションが必要)を解決するための「安全な」方法を考え出そうとしている初期の標準的な取り組みがあり、最新のバージョンで部分的に実装されているようですFirefoxとChromeのバージョンですが、まだ確認していません。


1
clipboard.jsがこの編集された投稿に追加されました。2015
コーダー

1
@acoder-クリップボードのサポートは定期的に変更されています。たとえば、Firefoxは最近(2015年後半)document.execCommand("copy")、これを使用することに依存する十分な状況で有効になりました。そのため、私は回答を最新の状態に保つように努めています(元々は約2年前に作成されました)。テキストを事前に選択し、ユーザーに手動でCtrl + Cを押すように指示する以外に、Safariに対する信頼できる解決策はまだありませんが、少なくとも他の場所で進行中です。
jfriend00

1
クリップボードAPIのサポートへのリンクは次のとおり
#

2
FYI、あたりのサファリのリリースノートのこのセットは、Safariの10が今サポートしないことが表示されますdocument.execCommand("copy")。このコードは、Safariの10で動作するようになりましたので
jfriend00

1
@sebastiangodelet-パブリックドメイン。
jfriend00 2017年

641

アップデート2020:このソリューションはを使用しexecCommandます。この回答を書いている時点ではその機能は問題ありませんでしたが、現在は廃止されていると見なされています。多くのブラウザで引き続き機能しますが、サポートが終了する可能性があるため、使用は推奨されません。

Flash以外の方法もあります(jfriend00の回答に記載されているクリップボードAPIは別として)。テキストを選択してからコマンドを実行する必要がありますcopyをして、ページで現在選択されているテキストをクリップボードにコピーます。

たとえば、この関数は渡された要素のコンテンツをクリップボードにコピーします(PointZeroTwoからのコメントの提案で更新されます):

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" />

主な問題は、現時点ではすべてのブラウザがこの機能をサポートしているわけではないことですが、次の主要なブラウザで使用できます。

  • Chrome 43
  • Internet Explorer 10
  • Firefox 41
  • Safari 10

更新1:これは、純粋なJavaScriptソリューション(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" />

#なしでidを渡すことに注意してください。

madzohanとして以下のコメントで報告された、いくつかの例(ローカルファイルを実行している)でGoogle Chromeの64ビット版といくつかの奇妙な問題があります。この問題は、上記の非jQueryソリューションで修正されるようです。

MadzohanはSafariを試してみましたが、解決策は機能しましたが、使用するdocument.execCommand('SelectAll')代わりに.select()(チャットと以下のコメントで指定されています)。

以下のようPointZeroTwoはコメントで指摘し、それが成功/失敗の結果を返しますので、コードを向上させることができました。この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 Chrome 43.0.2357.130(64ビット)
madzohan

2
@madzohanわかりました。問題を再現できました。64ビットChromeのローカル(file://)でしか再現できなかったので、それは奇妙です。また、jQueryの代わりにプレーンJavaScriptを使用するという、私にとって有効な簡単な解決策も見つけました。そのコードで答えを更新します。確認して、うまくいくかどうかお知らせください。
Alvaro Montoro

1
FWIW-document.execCommand( "copy")は、コピーが成功したかどうかを示すブール値(IE、Chrome、Safari)を返します。失敗時にエラーメッセージを表示するために使用できます。Firefoxは(少なくともv39では)失敗時に例外をスローし、エラーを処理するためにtry / catchを要求します。
PointZeroTwo 2015

3
呼び出しのaux.style.position = "fixed"; aux.style.top = 0;上に次の行を追加してauxがページに表示されることを確認するまで、これは機能しませんでした appendChild
ariscris、

7
元のjQuery実装はINPUT要素を使用しているため、改行を保持できません。代わりにTEXTAREAを使用すると、これを解決できます。
thomasfuchs 2017年

37

clipboard.jsは、Flashを使用せずにテキストまたはHTMLデータをクリップボードにコピーできる便利なユーティリティです。使い方はとても簡単です。.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>

clipboard.jsもGitHubにあります

2016年1月15日の編集:2015年8月に投稿された私の回答で同じAPIを参照するように、今日、トップアンサー編集されました。前のテキストは、ユーザーにZeroClipboardを使用するように指示していました。私がjfriend00の答えからこれをヤンクしなかったのではなく、むしろ逆にしたことを明確にしたいだけです。


クリップボード-js-
Yevgeniy Afanasyev

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

改行あり(Alvaro Montoroからの回答の延長)

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

フラッシュやその他の要件がない場合のさらに優れたアプローチは、clipboard.jsです。data-clipboard-target="#toCopyElement"ボタンを追加して初期化するnew Clipboard('.btn');と、DOMのコンテンツがIDでコピーされますtoCopyElementクリップボードに。これは、リンクを介して質問で提供されたテキストをコピーするスニペットです。

ただし、Safariでは機能しませんが、フラッシュを使用しないため、モバイルブラウザーを含む他のすべてのブラウザーでは機能します。

$(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でのみ使用できます。
Vignesh Chinnaiyan 2016年

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

このlibを使用して、コピーの目標を簡単に実現できます。

https://clipboardjs.com/

テキストをクリップボードにコピーするのは難しくありません。何十ステップもの設定や数百KBの読み込みは必要ありません。しかし、何よりも、Flashや肥大化したフレームワークに依存するべきではありません。

それが、clipboard.jsが存在する理由です。

または

https://github.com/zeroclipboard/zeroclipboard

http://zeroclipboard.org/

ZeroClipboardライブラリは、非表示のAdobe FlashムービーとJavaScriptインターフェースを使用してテキストをクリップボードにコピーする簡単な方法を提供します。


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コンテンツの編集をサポートしているため、非表示の要素を作成せず、テキストの書式を維持し、純粋なJavaScriptまたは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

クリップボードポリフィルライブラリは、最新のPromiseベースの非同期クリップボードAPIのポリフィルです。

CLIでインストール:

npm install clipboard-polyfill 

JSファイルにクリップボードとしてインポート

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

私はをバンドルして使用し、require("babel-polyfill");Chrome 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" />

JSコード:

     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

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

ペアのクラス「コンテンツ-コピーボタン」用のインラインonclickのない純粋なJS。多くの要素がある場合、より快適になります)

(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

どちらも魅力のように機能します:)、

ジャバスクリプト:

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.