Maison >interface Web >js tutoriel >Comment copier du contenu dans le presse-papiers en JavaScript
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 'clipboard'; const btnCopy = new Clipboard('btn');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 'clipboard'; const btnCopy = new Clipboard('btn'); 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()
Méthode document.execCommand()
Regardez d'abord comment cette méthode est définie sur : MDN
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 utilisantIl 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('#btn'); btn.addEventListener('click', () => { const input = document.querySelector('#demoInput'); input.select(); if (document.execCommand('copy')) { document.execCommand('copy'); console.log('复制成功'); } })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. d5fd7aea971a85678ba271703566ebfd
e388a4556c0f65e1904146cc1a846bee
N'oubliez pas qu'il a été mentionné dans la définition de la méthode
execCommand()
En ce moment, nous devons sauver le pays.
0daa849bc639fff17b006ca8cf3a07caCliquez sur moi pour copier65281c5ac262bf6d81768915a4a77ac0
code js
const btn = document.querySelector('#btn'); btn.addEventListener('click',() => { const input = document.createElement('input'); document.body.appendChild(input); input.setAttribute('value', '听说你想复制我'); input.select(); if (document.execCommand('copy')) { document.execCommand('copy'); console.log('复制成功'); } 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ésLors 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émentVous 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('#btn'); btn.addEventListener('click',() => { const input = document.createElement('input'); input.setAttribute('readonly', 'readonly'); input.setAttribute('value', 'hello world'); document.body.appendChild(input); input.setSelectionRange(0, 9999); if (document.execCommand('copy')) { document.execCommand('copy'); console.log('复制成功'); } document.body.removeChild(input); })
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
详细讲解使用Node.js写一个简单的命令行工具(详细教程)
在Node.js中使用cheerio制作简单的网页爬虫(详细教程)
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!