Je dois extraire les détails de chaque colonne de mon tableau. Par exemple, la colonne "Nom/Nr.".
Problème: Mon code ne récupère que le premier <td>
ayant une classe nr
. Comment puis-je obtenir que cela fonctionne?
Voici le bit jQuery:
$(".use-address").click(function() {
var id = $("#choose-address-table").find(".nr:first").text();
$("#resultas").append(id); // Testing: append the contents of the td to a div
});
Table:
<table id="choose-address-table" class="ui-widget ui-widget-content">
<thead>
<tr class="ui-widget-header ">
<th>Name/Nr.</th>
<th>Street</th>
<th>Town</th>
<th>Postcode</th>
<th>Country</th>
<th>Options</th>
</tr>
</thead>
<tbody>
<tr>
<td class="nr"><span>50</span>
</td>
<td>Some Street 1</td>
<td>Leeds</td>
<td>L0 0XX</td>
<td>United Kingdom</td>
<td>
<button type="button" class="use-address" />
</td>
</tr>
<tr>
<td class="nr">49</td>
<td>Some Street 2</td>
<td>Lancaster</td>
<td>L0 0XX</td>
<td>United Kingdom</td>
<td>
<button type="button" class="use-address" />
</td>
</tr>
</tbody>
</table>
L’exercice a pour but de trouver la ligne contenant les informations. Lorsque nous y arrivons, nous pouvons facilement extraire les informations requises.
$(".use-address").click(function() {
var $item = $(this).closest("tr") // Finds the closest row <tr>
.find(".nr") // Gets a descendent with class="nr"
.text(); // Retrieves the text within <td>
$("#resultas").append($item); // Outputs the answer
});
Passons maintenant aux questions fréquemment posées dans de telles situations.
Utilisation de .closest()
:
var $row = $(this).closest("tr");
Utilisation de .parent()
:
Vous pouvez également remonter dans l'arborescence DOM à l'aide de .parent()
method. Ceci est juste une alternative qui est parfois utilisée avec .prev()
et .next()
.
var $row = $(this).parent() // Moves up from <button> to <td>
.parent(); // Moves up from <td> to <tr>
<td>
du tableauNous avons donc notre $row
et nous aimerions afficher le texte de la cellule du tableau:
var $row = $(this).closest("tr"), // Finds the closest row <tr>
$tds = $row.find("td"); // Finds all children <td> elements
$.each($tds, function() { // Visits every single <td> element
console.log($(this).text()); // Prints out the text within the <td>
});
<td>
spécifiqueSemblable au précédent, nous pouvons toutefois spécifier l’index de l’élément enfant <td>
.
var $row = $(this).closest("tr"), // Finds the closest row <tr>
$tds = $row.find("td:nth-child(2)"); // Finds the 2nd <td> element
$.each($tds, function() { // Visits every single <td> element
console.log($(this).text()); // Prints out the text within the <td>
});
.closest()
- récupère le premier élément qui correspond au sélecteur.parent()
- Obtenir le parent de chaque élément de l'ensemble actuel d'éléments correspondants.parents()
- récupère les ancêtres de chaque élément de l'ensemble actuel d'éléments correspondants.children()
- récupère les enfants de chaque élément dans l'ensemble d'éléments correspondants.siblings()
- récupère les frères et soeurs de chaque élément dans l'ensemble des éléments correspondants.find()
- récupère les descendants de chaque élément du jeu d'éléments correspondants.next()
- récupère le frère immédiatement suivant de chaque élément de l'ensemble des éléments correspondants.prev()
- récupère le frère immédiatement précédent de chaque élément de l'ensemble des éléments correspondantsEssaye ça:
$(".use-address").click(function() {
$(this).closest('tr').find('td').each(function() {
var textval = $(this).text(); // this will be the text of each <td>
});
});
Ceci trouvera la tr
(remontant dans le DOM) la plus proche du bouton sur lequel vous avez cliqué, puis bouclez chaque td
- vous pouvez créer une chaîne/un tableau avec les valeurs.
Obtenir l'adresse complète en utilisant un exemple de tableau ici
Vous devez changer votre code pour trouver la ligne par rapport au bouton sur lequel vous avez cliqué. Essaye ça:
$(".use-address").click(function() {
var id = $(this).closest("tr").find(".nr").text();
$("#resultas").append(id);
});
function useAdress () {
var id = $("#choose-address-table").find(".nr:first").text();
alert (id);
$("#resultas").append(id); // Testing: append the contents of the td to a div
};
puis sur votre bouton:
onclick="useAdress()"
Le sélecteur ".nr:first"
recherche spécifiquement le premier et le seul élément ayant la classe "nr"
dans l’élément de tableau sélectionné. Si vous appelez plutôt .find(".nr")
, vous obtiendrez tous les éléments de la table ayant la classe "nr"
. Une fois que vous avez tous ces éléments, vous pouvez utiliser la méthode .each pour les parcourir. Par exemple:
$(".use-address").click(function() {
$("#choose-address-table").find(".nr").each(function(i, nrElt) {
var id = nrElt.text();
$("#resultas").append("<p>" + id + "</p>"); // Testing: append the contents of the td to a div
});
});
Cependant, cela vous donnerait tous des éléments td.nr
de la table, pas seulement celui de la ligne sur laquelle vous avez cliqué. Pour limiter davantage votre sélection à la ligne contenant le bouton cliqué, utilisez la méthode .closest , comme suit:
$(".use-address").click(function() {
$(this).closest("tr").find(".nr").each(function(i, nrElt) {
var id = nrElt.text();
$("#resultas").append("<p>" + id + "</p>"); // Testing: append the contents of the td to a div
});
});
Voici le code complet pour un exemple simple de délégué
<!DOCTYPE html>
<html lang="en">
<head>
<title>Bootstrap Example</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<h2>Striped Rows</h2>
<p>The .table-striped class adds zebra-stripes to a table:</p>
<table class="table table-striped">
<thead>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<tr>
<td>John</td>
<td>Doe</td>
<td>[email protected]</td>
<td>click</td>
</tr>
<tr>
<td>Mary</td>
<td>Moe</td>
<td>[email protected]</td>
<td>click</td>
</tr>
<tr>
<td>July</td>
<td>Dooley</td>
<td>[email protected]</td>
<td>click</td>
</tr>
</tbody>
</table>
<script>
$(document).ready(function(){
$("div").delegate("table tbody tr td:nth-child(4)", "click", function(){
var $row = $(this).closest("tr"), // Finds the closest row <tr>
$tds = $row.find("td:nth-child(2)");
$.each($tds, function() {
console.log($(this).text());
var x = $(this).text();
alert(x);
});
});
});
</script>
</div>
</body>
</html>
var values = [];
var count = 0;
$("#tblName").on("click", "tbody tr", function (event) {
$(this).find("td").each(function () {
values[count] = $(this).text();
count++;
});
});
Maintenant, le tableau de valeurs contient toutes les valeurs de cellule de cette ligne Peut être utilisé comme valeurs [0] première valeur de cellule de la ligne cliquée
Trouver un élément avec id dans une ligne à l'aide de jquery
$(document).ready(function () {
$("button").click(function() {
//find content of different elements inside a row.
var nameTxt = $(this).closest('tr').find('.name').text();
var emailTxt = $(this).closest('tr').find('.email').text();
//assign above variables text1,text2 values to other elements.
$("#name").val( nameTxt );
$("#email").val( emailTxt );
});
});