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>
`