J'aurai ce bouton une fois pour chaque table (environ 25
tables distinctes) sur cette page et j'espère trouver un moyen d'avoir l'appel à l'événement onclick
la fonction constructDataValueString
et passez le id
de la table parent (pour ne pas avoir à référencer explicitement l'identifiant de la table).
Y a-t-il un moyen de write:
onclick="constructDataValueString(*id_of_parent_table*)"
Exemple graphique du balisage HTML:
5 Réponses :
Bien sûr - utilisez this.parentNode.parentNode.parentNode.parentNode.id
:
<table id="populationbyage"> <tbody> <tr> <td> <button onclick="constructDataValueString(this.parentNode.parentNode.parentNode.parentNode.id)">Copy</button> </td> </tr> </tbody> </table>
function constructDataValueString(id) { console.log(id); }
(Ce qui précède est un exemple minimaliste - il suit exactement la même structure, il n'a que les éléments et attributs nécessaires.
Vous pouvez utiliser plus proche () , par exemple:
<table id="populationbyage" border="2"> <thead>TABLE</thead> <tbody> <tr> <td> Some Cell... </td> <td> <button onclick="constructDataValueString(this.closest('table').id)"> Copy </button> </td> </tr> </tbody> </table>
Exemple
.as-console {background-color:black !important; color:lime;} .as-console-wrapper {max-height:50% !important;}
const constructDataValueString = (id) => console.log("table id is: ", id);
onclick="constructDataValueString(this.closest('table').id)"
Quelques secondes d'avance avec le même exemple, félicitations!
Une solution plus flexible
function parent(el, selector) { var matchesFn; // find vendor prefix ['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'].some(function (fn) { if (typeof document.body[fn] == 'function') { matchesFn = fn; return true; } return false; }); var parent; // traverse parents while (el) { parent = el.parentElement; if (parent && parent[matchesFn](selector)) { return parent; } el = parent; } return null; } <table id="populationbyage"> <tbody> <tr> <td> <button onclick="console.log(parent(event.target, '#populationbyage'))">Copy</button> </td> </tr> </tbody> </table>
Pour vous assurer que votre structure interne de Comme d'autres réponses le suggèrent, utilisez le plus proche ()
https://developer.mozilla.org/en-US/ docs / Web / API / Element / plus proche Pour répondre à votre question et également pour s'adresser à quelqu'un qui souhaite qu'un élément particulier soit envoyé, il existe un moyen d'envoyer exactement l'identifiant de la table ou de tu veux. La récupération de l'approche id identifiera la table à laquelle vous voulez accéder ici. Cela vous aidera à ignorer toutes les tables imbriquées si à l'avenir vous souhaitez en ajouter. table
peut changer sans affecter cette partie, vous pouvez utiliser this.closest ("table")
afin d'obtenir le premier
élément, d'où vous pouvez obtenir l'identifiant:
constructDataValueString(this.closest("table").id)
votes
`<table id="populationbyage" border="2">
<thead>TABLE</thead>
<tbody>
<tr>
<td>
Some Cell...
</td>
<td>
<button onclick="constructs(this.closest('#populationbyage').id)">
Copy
</button>
</td>
</tr>
</tbody>
</table>
<script>
function constructs(id) {
console.log(id)
}
</script>
`