テーブルの各列の詳細を抽出する必要があります。たとえば、列 "Name/Nr。"です。
問題:私のコードはクラスnr
を持つ最初の<td>
のみを拾います。これを機能させるにはどうすればいいですか。
これが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>
演習の目的は、情報を含む行を見つけることです。そこに着いたら、必要な情報を簡単に抽出できます。
$(".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()
を使う:
.parent()
メソッドを使ってDOMツリーを上に移動することもできます。これは、.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>
});
});
これにより、現在クリックされているボタンに最も近い(DOMを通過する)tr
が検索され、各td
がループされます。値を含む文字列/配列を作成することをお勧めします。
クリックしたボタンに関連する行を見つけるようにコードを変更する必要があります。これを試して:
$(".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
};
それからあなたのボタンで:
onclick="useAdress()"
セレクタ".nr:first"
は、選択されたテーブル要素内でクラス"nr"
を持つ最初の要素と最初の要素のみを探しています。代わりに.find(".nr")
を呼び出すと、クラス"nr"
を持つテーブル内のすべての要素が取得されます。これらの要素がすべて揃ったら、 。each メソッドを使用してそれらの要素を繰り返すことができます。例えば:
$(".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
});
});
しかし、それはあなたがall表のtd.nr
要素のうち、クリックされた行のものだけではなくなるでしょう。クリックされたボタンを含む行に選択をさらに制限するには、次のように 。nearest メソッドを使用します。
$(".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
});
});
これがデリゲートの簡単な例の完全なコードです。
<!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++;
});
});
Values配列に、その行のすべてのセル値が含まれるようになりました。クリックした行のvalues [0]最初のセル値のように使用できます。
jqueryを使って行内のidを持つ要素を探す
$(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 );
});
});