Maison >interface Web >js tutoriel >Comment copier du contenu dans le presse-papiers en JavaScript

Comment copier du contenu dans le presse-papiers en JavaScript

亚连
亚连original
2018-06-04 10:11:462209parcourir

Il y a une petite exigence dans une page d'événement récent. Les utilisateurs peuvent cliquer ou appuyer longuement pour copier le contenu dans le presse-papiers et enregistrer le processus de mise en œuvre et les pièges rencontrés. Les amis dans le besoin peuvent s'y référer

. Méthodes courantes

Après vérification du tout-puissant Google, les méthodes courantes sont principalement les deux suivantes :

Bibliothèque tierce : clipboard.js
Méthode native : document . execCommand()

Voyons comment ces deux méthodes sont utilisées.

clipboard.js

Voici le site officiel de clipboard : https://clipboardjs.com/, cela semble si simple.

Citation

Citation directe :

<script src="dist/clipboard.min.js"></script>

Forfait : npm install clipboard --save , puis import Clipboard from 'clipboard';

Copier depuis la zone de saisie en utilisant

Il y a maintenant une balise d5fd7aea971a85678ba271703566ebfd sur la page et nous devons copier le contenu à l'intérieur, nous pouvons le faire :

<input id="demoInput" value="hello world">
<button class="btn" data-clipboard-target="#demoInput">点我复制</button>

import Clipboard from &#39;clipboard&#39;;
const btnCopy = new Clipboard(&#39;btn&#39;);

Notez qu'un attribut

est ajouté à la balise bb9345e55eb71822850ff156dfde57c8 et que sa valeur doit être copié data-clipboard-target d5fd7aea971a85678ba271703566ebfd, comme son nom l'indique, copie le contenu de la balise entière. id

Copier directement

Parfois, nous ne voulons pas copier le contenu de d5fd7aea971a85678ba271703566ebfd, mais simplement obtenir la valeur directement de la variable. Si nous pouvons faire cela dans Vue :

<button class="btn" :data-clipboard-text="copyValue">点我复制</button>

import Clipboard from &#39;clipboard&#39;;
const btnCopy = new Clipboard(&#39;btn&#39;);
this.copyValue = 'hello world';

Événement

Parfois, nous devons faites quelque chose après la copie, et vous avez alors besoin de la prise en charge d'une fonction de rappel.

Ajoutez le code suivant à la fonction de traitement :

// 复制成功后执行的回调函数
clipboard.on('success', function(e) {
 console.info('Action:', e.action); // 动作名称,比如:Action: copy
 console.info('Text:', e.text); // 内容,比如:Text:hello word
 console.info('Trigger:', e.trigger); // 触发元素:比如:<button class="btn" :data-clipboard-text="copyValue">点我复制</button>
 e.clearSelection(); // 清除选中内容
});

// 复制失败后执行的回调函数
clipboard.on('error', function(e) {
 console.error('Action:', e.action);
 console.error('Trigger:', e.trigger);
});

Résumé

Dans le document Il a également été mentionné que si vous utilisez

sur une seule page, afin de rendre la gestion du cycle de vie plus élégante, pensez à détruire clipboard après utilisation. btn.destroy()

Le Presse-papiers est très simple à utiliser. Cependant, n'est-il pas assez élégant d'utiliser des bibliothèques tierces supplémentaires uniquement pour une fonction de copie ? Utilisez ensuite des méthodes natives pour y parvenir.

Méthode document.execCommand()

Regardez d'abord comment cette méthode est définie sur

 : MDN

qui permet d'exécuter des commandes pour manipuler le contenu de la région modifiable.


signifie que des commandes peuvent être exécutées pour manipuler le contenu de la région modifiable. Notez qu'il s'agit d'une région modifiable.

Définition

bool = document.execCommand(aCommandName, aShowDefaultUI, aValueArgument)

La méthode renvoie une valeur booléenne, indiquant si l'opération a réussi.

  • aCommandName : indique le nom de la commande, tel que : copier, couper, etc. (voir commandes pour plus de commandes) ;

  • aShowDefaultUI : S'il faut afficher l'interface utilisateur, généralement faux ;

  • aValueArgument : Certaines commandes nécessitent des paramètres supplémentaires, qui ne sont généralement pas utilisés ;

Sexe compatible

La compatibilité de cette méthode n'était effectivement pas très bonne auparavant, mais heureusement, elle est désormais fondamentalement compatible avec tous les principaux navigateurs et peut également être utilisée sur les terminaux mobiles.

Copier depuis la zone de saisie en utilisant

Il y a maintenant une balise d5fd7aea971a85678ba271703566ebfd à copier Pour le contenu, on peut faire ceci :


<input id="demoInput" value="hello world">
<button id="btn">点我复制</button>

code js

const btn = document.querySelector(&#39;#btn&#39;);
btn.addEventListener(&#39;click&#39;, () => {
	const input = document.querySelector(&#39;#demoInput&#39;);
	input.select();
	if (document.execCommand(&#39;copy&#39;)) {
		document.execCommand(&#39;copy&#39;);
		console.log(&#39;复制成功&#39;);
	}
})

Copier ailleurs

Parfois il n'y a pas de balise

sur la page, nous pouvons avoir besoin de copier le contenu d'un

, ou de copier la variable directement. d5fd7aea971a85678ba271703566ebfde388a4556c0f65e1904146cc1a846bee N'oubliez pas qu'il a été mentionné dans la définition de la méthode

qu'elle ne peut fonctionner que sur des zones modifiables, ce qui signifie qu'elle ne peut être utilisée que pour les champs de saisie tels que d5fd7aea971a85678ba271703566ebfd ; Cette méthode.

execCommand() En ce moment, nous devons sauver le pays.

0daa849bc639fff17b006ca8cf3a07caCliquez sur moi pour copier65281c5ac262bf6d81768915a4a77ac0

code js

const btn = document.querySelector(&#39;#btn&#39;);
btn.addEventListener(&#39;click&#39;,() => {
	const input = document.createElement(&#39;input&#39;);
	document.body.appendChild(input);
 	input.setAttribute(&#39;value&#39;, &#39;听说你想复制我&#39;);
	input.select();
	if (document.execCommand(&#39;copy&#39;)) {
		document.execCommand(&#39;copy&#39;);
		console.log(&#39;复制成功&#39;);
	}
 document.body.removeChild(input);
})

Cela peut être considéré comme un moyen efficace de sauver le pays. Plusieurs écueils ont été rencontrés lors de l’utilisation de cette méthode.

Pièges rencontrés

Lors du débogage sous Chrome, cette méthode fonctionne parfaitement. Puis, lorsqu’il s’est agi de déboguer le terminal mobile, le gouffre est sorti.

Oui, c'est vrai, c'est toi, ios. . .

1. Lorsque vous cliquez sur copier, une gigue d'écran blanche apparaîtra en bas de l'écran. Si vous regardez attentivement, vous pouvez retirer le clavier et le ranger instantanément

Vous saurez ce qui cause la gigue. C'est plus facile à résoudre. Puisque le clavier est relevé, l'accent est mis sur le champ de saisie. Ensuite, rendez simplement le champ de saisie indisponible pour la saisie. Ajoutez input.setAttribute('readonly', 'readonly'); au code pour que ce d5fd7aea971a85678ba271703566ebfd -seulement Oui, cela ne fera pas apparaître le clavier.

2. Impossible de copier

这个问题是由于 input.select() 在ios下并没有选中全部内容,我们需要使用另一个方法来选中内容,这个方法就是 input.setSelectionRange(0, input.value.length);。

完整代码如下:

const btn = document.querySelector(&#39;#btn&#39;);
btn.addEventListener(&#39;click&#39;,() => {
	const input = document.createElement(&#39;input&#39;);
 input.setAttribute(&#39;readonly&#39;, &#39;readonly&#39;);
 input.setAttribute(&#39;value&#39;, &#39;hello world&#39;);
 document.body.appendChild(input);
	input.setSelectionRange(0, 9999);
	if (document.execCommand(&#39;copy&#39;)) {
		document.execCommand(&#39;copy&#39;);
		console.log(&#39;复制成功&#39;);
	}
 document.body.removeChild(input);
})

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

详细讲解使用Node.js写一个简单的命令行工具(详细教程)

在Node.js中使用cheerio制作简单的网页爬虫(详细教程)

在vue中如何实现父组件向子组件传递多个数据

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn