最近、ちょっとした処理でもJavaScriptではなく、jQueryで書く方が簡単だったりでこんな問題に出くわしました。
動的に取得したXMLデータの上位数件のみを対象に処理を行いたい場合。(例えば100件のリストの中から上位5件のみ取り出したい時)
var xmlListTop5 = ""; // ここに結果を格納したい var loopCounter = 0; $.ajax({ url: 'sample.xml', type: 'get', dataType: 'xml', timeout: 1000, success: function(xml){ // XML取得後の処理 $(xml).find('entry').each(function() { // XMLのデータ(entry)件数ループ処理する xmlListTop5 += $(this).find('項目名').text() + "
"; loopCounter ++; if (loopCounter >= 5) { break; } }); } });
JavaScriptのfor文をbreakで抜けるようなつもりで書いたのですがエラーになりました。
厳密にいうと、forやbreakはJavaScriptの処理で、eachはjQueryの機能という事でしょう。
そんな時に見つけたのが、jQueryの:lt
セレクタです。見ての通り、「lt」は、英語の「less than」の略で、日本語で言うところの「未満」に当たるものです。詳細は本家サイトのドキュメントをご参照ください。
var xmlListTop5 = ""; // ここに結果を格納したい $.ajax({ url: 'sample.xml', type: 'get', dataType: 'xml', timeout: 1000, success: function(xml){ // XML取得後の処理 $(xml).find('entry:lt(5)').each(function() { // XMLのデータ(entry)の最初の5件数を処理する xmlListTop5 += $(this).find('項目名').text() + "
"; }); } });
.find('entry').each( ...
としていた部分を.find('entry:lt(5)').each( ...
とすることで、カウンターや判定処理を使わずに実現が出来ます。
※ 判定に使われるインデックス値は0スタートの番号です。
反対に:gt()
は、より多いとなります。
複雑な条件を作ることはできませんが、上位や下位のみ処理したい場合には重宝します。