Получить содержимое строки таблицы с помощью кнопки мыши
мне нужно извлечь детали каждого столбца в моей таблице. Например, столбец "Имя/номер".
- таблица содержит ряд адресов
- в самом последнем столбце каждой строки есть кнопка, которая позволяет пользователю выбрать указанный адрес.
: мой код берет только первый <td>
это имеет класс nr
. Как мне заставить это работать?
вот 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 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>
8 ответов:
цель упражнения состоит в том, чтобы найти строку, содержащую информацию. Когда мы доберемся туда, мы можем легко извлечь необходимую информацию.
ответ
$(".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 });
теперь давайте сосредоточимся на некоторых часто задаваемых вопросах в таких ситуациях.
как найти ближайший ряд?
используя
.closest()
:var $row = $(this).closest("tr");
используя
.parent()
:вы также можете двигаться вверх по дереву DOM с помощью
.parent()
метод. Это просто альтернатива, которая иногда используется вместе с.prev()
и.next()
.var $row = $(this).parent() // Moves up from <button> to <td> .parent(); // Moves up from <td> to <tr>
получение всех ячеек таблицы
<td>
значенияИтак, у нас есть
$row
и мы хотели бы вывести текст ячейки таблицы: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>
стоимостьюаналогично предыдущему, однако мы можем указать индекс ребенка
<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()
- получить первый элемент, соответствующий селектору.parent()
- получить родителя для каждого элемента в наборе совпавших элементов.parents()
- получить предков каждого элемента в текущем наборе совпадающих элементов.children()
- дети из каждого элемента в наборе совпавших элементов.siblings()
- получить братьев и сестер каждого элемента в наборе согласованных элементов.find()
- потомки каждого элемента в текущий набор согласованных элементов.next()
- получить следующий одноуровневый каждого элемента в наборе совпавших элементов.prev()
- получить непосредственно предшествующий брат каждого элемента в наборе согласованных элементов
попробуйте это:
$(".use-address").click(function() { $(this).closest('tr').find('td').each(function() { var textval = $(this).text(); // this will be the text of each <td> }); });
Это будет найти ближайший
tr
(переход через DOM) текущей нажатой кнопки, а затем цикл каждыйtd
- вы можете создать строку / массив со значениями.
вам нужно изменить код, чтобы найти строку относительно кнопки, которая была нажата. Попробуйте это:
$(".use-address").click(function() { var id = $(this).closest("tr").find(".nr").text(); $("#resultas").append(id); });
переключатель
".nr:first"
специально искал первый, и только первый элемент, имеющий класс"nr"
в пределах выбранного элемента таблицы. Если вы вместо этого позвоните.find(".nr")
вы получите все элементы в таблице, имея класс"nr"
. Если у вас есть все эти элементы, вы можете использовать .каждый метод итерации по ним. Например:$(".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 }); });
однако, что бы получить вас все на
td.nr
элементы в таблице, не только тот, который был нажат в строке. Чтобы еще больше ограничить выбор строкой, содержащей нажатую кнопку, используйте .ближайший метод, например, так:$(".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 }); });
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 };
нажмите на кнопки:
onclick="useAdress()"
найти элемент с идентификатором в строке с помощью 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 ); }); });
var values = []; var count = 0; $("#tblName").on("click", "tbody tr", function (event) { $(this).find("td").each(function () { values[count] = $(this).text(); count++; }); });
теперь массив значений содержит все значения ячеек этой строки может использоваться как значения[0] значение первой ячейки нажатой строки
вот полный код для простого примера делегата
<!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>john@example.com</td> <td>click</td> </tr> <tr> <td>Mary</td> <td>Moe</td> <td>mary@example.com</td> <td>click</td> </tr> <tr> <td>July</td> <td>Dooley</td> <td>july@example.com</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>