0

を使用して、チェックされたすべてのチェックボックスのIDを取得しようとしています

$(document).ready(function(){
$("#thechecked").click(function(){
    var closestTr = $(':checkbox:checked').closest('tr').attr('id');

    var arr = $.map($(closestTr), function(e, i) {
        return +e.value;
    });
   alert(arr.join(','));
});
});

http://jsfiddle.net/3HS8P/1/は空の配列を返します

空の配列を返すのはなぜですか?

4

4 に答える 4

4

attr('id')idすべてではなく、最初の要素ののみを返します。コレクションを直接マップできます。

$("#thechecked").click(function () {
    var arr = $(':checkbox:checked').closest('tr').map(function(i, e) {
        return +e.id;
    }).get();
    alert(arr.join(','));
});

http://jsfiddle.net/3HS8P/2

jQuery オブジェクトに対してa.mapを実行すると jQuery オブジェクトが返される.get()ため、実際の配列を取得して.join()その要素を取得できるようにする必要もあります。

以下のコメントで @Alnitak が指摘したように、CSS は数字で始まるスタイル ID を許可していません (動作する可能性はありますが、仕様では許可されていません)。data-id="1"の代わりに を使用id="1"し、 を使用してアクセスすることをお勧めし$(el).data("id")ます。

于 2013-05-31T11:43:02.677 に答える
1
$(document).ready(function(){
    $("#thechecked").click(function() {
        var closestTr = $('input:checkbox:checked').closest('tr');
        var arr = closestTr.map(function(i, e) {
            return e.id;
        }).get();
       alert(arr.join(','));
    });
});

于 2013-05-31T11:40:14.890 に答える
0

行末.attr('id')は一連の要素ではなく文字列を返しているため、$.map. jQuery オブジェクトのすべての要素のすべての ID を返す次の一般的な例を試してください$el

var ids = $el.map(function(_, el) {
    return el.id;
}).get();

あなたの場合、元のコードに従ってボトムアップで作業します。

var $el = $(':checked').closest('tr');

または、代わりに (そしておそらくあまり効率的ではないことは確かです) トップダウンで作業します。

var $el = $('tr').has(':checked');
于 2013-05-31T11:43:21.580 に答える