Je me demandais si quelqu'un savait comment utiliser js le tableau complet pour que l'utilisateur puisse cliquer avec le bouton droit de la souris sur la sélection, la copier dans le presse-papiers et la coller ensuite dans Excel. Si vous sélectionnez la table manuellement, le processus fonctionne parfaitement. Mais parfois, si la hauteur de la table est quelques fois supérieure à celle de l’écran, le sélectionner en faisant glisser la souris devient fastidieux. Donc, je veux donner aux utilisateurs la possibilité de cliquer sur un bouton "sélectionner le tableau entier" et tout est prêt à être copié.
Des idées?
Oui. Ce n'est pas trop compliqué, et ce qui suit fonctionnera dans tous les navigateurs traditionnels (y compris IE 6, voire 5):
(Mis à jour le 7 septembre 2012 après le commentaire de Jukka Korpela soulignant que la version précédente ne fonctionnait pas en mode IE 9 en mode standard)
Démo: http://jsfiddle.net/timdown/hGkGp/749/
Code:
function selectElementContents(el) {
var body = document.body, range, sel;
if (document.createRange && window.getSelection) {
range = document.createRange();
sel = window.getSelection();
sel.removeAllRanges();
try {
range.selectNodeContents(el);
sel.addRange(range);
} catch (e) {
range.selectNode(el);
sel.addRange(range);
}
} else if (body.createTextRange) {
range = body.createTextRange();
range.moveToElementText(el);
range.select();
}
}
<table id="tableId" border="1">
<thead>
<tr><th>Heading 1</th><th>Heading 2</th></tr>
</thead>
<tbody>
<tr><td>cell 1</td><td>cell 2</td></tr>
</tbody>
</table>
<input type="button" value="select table" onclick="selectElementContents( document.getElementById('tableId') );">
Je l'ai finalement fait fonctionner dans IE9 en utilisant le script suivant
REMARQUE: cela ne fonctionne pas sur les tables HTML. Ce doit être un DIV. Il suffit donc de placer un DIV wrapper autour de la table que vous devez sélectionner!
J'ai d'abord changé un peu le code du bouton HTML:
<input type="button" value="Mark table" onclick="SelectContent('table1');">
Puis changé le javascript à:
function SelectContent (el) {
var elemToSelect = document.getElementById (el);
if (window.getSelection) { // all browsers, except IE before version 9
var selection = window.getSelection ();
var rangeToSelect = document.createRange ();
rangeToSelect.selectNodeContents (elemToSelect);
selection.removeAllRanges ();
selection.addRange (rangeToSelect);
}
else // Internet Explorer before version 9
if (document.body.createTextRange) { // Internet Explorer
var rangeToSelect = document.body.createTextRange ();
rangeToSelect.moveToElementText (elemToSelect);
rangeToSelect.select ();
}
else if (document.createRange && window.getSelection) {
range = document.createRange();
range.selectNodeContents(el);
sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
}
}
Juste pour compléter le code proposé par Tim Down, permettant au contenu sélectionné d’être automatiquement copié dans le presse-papiers:
<script type="text/javascript">
function selectElementContents(el) {
var body = document.body, range, sel;
if (document.createRange && window.getSelection) {
range = document.createRange();
sel = window.getSelection();
sel.removeAllRanges();
try {
range.selectNodeContents(el);
sel.addRange(range);
} catch (e) {
range.selectNode(el);
sel.addRange(range);
}
document.execCommand("copy");
} else if (body.createTextRange) {
range = body.createTextRange();
range.moveToElementText(el);
range.select();
range.execCommand("Copy");
}
}
</script>
<table id="tableId">
<thead>
<tr><th>Heading</th><th>Heading</th></tr>
</thead>
<tbody>
<tr><td>cell</td><td>cell</td></tr>
</tbody>
</table>
<input type="button" value="select table"
onclick="selectElementContents( document.getElementById('tableId') );">
Voici ce que j'ai utilisé. Il crée également la commande de copie de sorte que tout ce que vous avez à faire est d’utiliser la commande Coller du document dans lequel vous souhaitez le placer. Fondamentalement, vous encapsulez le contenu que vous souhaitez copier dans une div, vous le récupérez à l'aide de innerHTML et vous le copiez dans le presse-papiers. Je ne l'ai pas testé sur tous les navigateurs, mais cela fonctionne sous Chrome, Safari, Firefox.
<div id="copycontent">
<table>
</table>
</div>
<input type="button" value="Mark table" onclick="SelectContent('copycontent');">
<script type="text/javascript">
function SelectContent (el) {
var aux = document.createElement("div");
aux.setAttribute("contentEditable", true);
aux.innerHTML = document.getElementById("main").innerHTML;
aux.setAttribute("onfocus", "document.execCommand('selectAll',false,null)");
document.body.appendChild(aux);
aux.focus();
document.execCommand("copy");
document.body.removeChild(aux);
}
</script>