データを表形式で表示する為に table タグを用いますが、 table の中の1個のセルデータを取得するには少し順を追って処理する必要があります。 以下の様に各タグを順番に指定することになります。
tableタグ ⇒ trタグ ⇒ tdタグ内のテキストの取得
trタグ も tdタグもそれぞれ複数の連続した要素から成り立っていますので、 何番目の要素であるかを指示することが必要になります。 そこで使用するのが eq() メソッドです。 先ずは eq() メソッドの説明から行い、その後で table の処理の説明をします。
■このページの内容
■eq() メソッドの使い方
table の操作と言っておきながら例として li タグを取り上げていますが、 li タグの方が見た感じが簡単なので直感的に分かるかと思います。
以下のソースを見て下さい。 li タグで5個のデータを表示しています。 「id="btn1"」のボタンクリックイベントの関数の中で eq() メソッドを使って li タグの2番目の要素を取得しています。 eq() メソッドの引数は要素のインデックスを指定しますが、インデックスの先頭は 0(ゼロ) から始まるので 2番目の場合は eq(1) と指定します。
「id="btn2"」のボタンクリックイベントでは更に処理を発展させて li タグの全ての要素を取得しています。
<html> <head> <meta charset="utf-8"> <title>test jQuery eq</title> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> </head> <body> <ul> <li>北海道</li> <li>本州</li> <li>四国</li> <li>九州</li> <li>沖縄</li> </ul> <button id="btn1">2番目の要素を取得</button><br /> <button id="btn2">全ての要素を取得</button> <script> $(function () { //<button id="btn1">のクリックイベントの関数を宣言 $("#btn1").click(function(){ //<li>の2番目の要素を取得 var str = $("li").eq(1).text(); alert(str); }); //<button id="btn2">のクリックイベントの関数を宣言 $("#btn2").click(function(){ //<li>の全ての要素を取得 var str = ''; for (var i = 0; i < $("li").length; i++) { str += $("li").eq(i).text() + "\n"; } alert(str); }); }); </script> </body>
■eq() メソッドの使って li タグの中身を変更
li タグの中身を変更するにはソースを以下の様に記述します。
<html> <head> <meta charset="utf-8"> <title>test jQuery eq2</title> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> </head> <body> <ul> <li>北海道</li> <li>本州</li> <li>四国</li> <li>九州</li> <li>沖縄</li> </ul> <button id="btn1">全ての要素を変更</button> <script> $(function () { //<button id="btn1">のクリックイベントの関数を宣言 $("#btn1").click(function(){ //<li>の全ての要素を変更 for (var i = 0; i < $("li").length; i++) { //取得文字列に"."追加 var str = $("li").eq(i).text() + "."; //要素を変更 $("li").eq(i).text(str); } }); }); </script> </body>
■簡単な table の要素の取得
それではいよいよ table の要素の取得を行います。 データ表としては見出し部分を含めて4行4列の簡単なものですが、 以下の table の中から3行目の「みかん」の単価の値を取得しています。
最初のボタン「id="btn1"」では、最初のセレクタ宣言から始まり、単価の部分まで"."(ドット)でオブジェクトを繋いで 一気にセルのテキストを取得しています。
ここで $("table").children().children() の部分で .children() が1回余計ではないかと思われるかもしれませんが、 これでOKなのです。 この table には実は tbody タグが省略されているからです。そのため tr の所にたどり着くまでに tbody を介しているからです。
次のボタン「id="btn2"」ではこの辺りを1個ずつのオブジェクトに階層を順次深めて処理を行っています。
ただ、セレクタの部分で一気に tr のところまで指示してやれば $("table").children().children() の部分を $("table tr") で置き換えられます。
<html> <head> <meta charset="utf-8"> <title>test jQuery eq3</title> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> </head> <body> <table border="1"> <tr> <th>品名</th> <th>数量</th> <th>単価</th> <th>金額</th> </tr> <tr> <td>りんご</td> <td>2</td> <td>100</td> <td>200</td> </tr> <tr> <td>みかん</td> <td>5</td> <td>50</td> <td>250</td> </tr> <tr> <td>いちご</td> <td>3</td> <td>250</td> <td>750</td> </tr> </table> <button id="btn1">みかんの行の単価を取得</button> <button id="btn2">みかんの行の単価を取得その2</button> <script> $(function () { //<button id="btn1">のクリックイベントの関数を宣言 $("#btn1").click(function(){ //「みかんの」の単価を取得 var str = $("table").children().children().eq(2).children().eq(3).text(); alert(str); //より簡単な方法 var str = $("table tr").eq(2).children().eq(3).text(); alert(str); }); //<button id="btn2">のクリックイベントの関数を宣言 $("#btn2").click(function(){ //オブジェクトの連結を分解 var objTable = $("table"); //<table> オブジェクト var objTbody = objTable.children(); //<tbody> オブジェクト var objTrarr = objTbody.children(); //<tr> 配列オブジェクト var objTr = objTrarr.eq(2); //<trの3番目> オブジェクト var objTdarr = objTr.children(); //<td> 配列オブジェクト var str = objTdarr.eq(3).text(); //<tdの4番目> オブジェクト alert(str); }); }); </script> </body>
■簡単な table の要素の取得2( thead tbody を記述)
上記の table に正式な感じにする為 thead tbody のタグを記述して、 table の要素の取得を行います。
<html> <head> <meta charset="utf-8"> <title>test jQuery eq4</title> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> </head> <body> <table border="1"> <thead> <tr> <th>品名</th> <th>数量</th> <th>単価</th> <th>金額</th> </tr> </thead> <tbody> <tr> <td>りんご</td> <td>2</td> <td>100</td> <td>200</td> </tr> <tr> <td>みかん</td> <td>5</td> <td>50</td> <td>250</td> </tr> <tr> <td>いちご</td> <td>3</td> <td>250</td> <td>750</td> </tr> </tbody> </table> <button id="btn1">みかんの行の単価を取得</button> <script> $(function () { //<button id="btn1">のクリックイベントの関数を宣言 $("#btn1").click(function(){ //「みかんの」の単価を取得(index = 1:2番目) var str = $("table tbody tr").eq(1).children().eq(3).text(); alert(str); }); }); </script> </body>
セレクタの中で一気に table ⇒ tbody ⇒ tr とオブジェクト参照を進め、tr の中の2番目のIndexを参照しています。 今回の table はヘッダとボディに分けましたので「みかん」の行は2番目のIndexになります。 その後は今までと同様にしてセルのテキストを取得します。
これで table からのデータ取得は一先ず終わりにしたいと思います。 今後は table への行追加、行削除へと移っていきます。
コメント