2

私はjQueryの初心者で、これが私がやろうとしていることです:

  • クラスが「選択」されているすべての要素 (後で混乱を避けるためにボックスと呼びましょう) を検索し、それぞれに番号を割り当てます。
  • これらのボックスのそれぞれで、それらのすべての入力要素を見つけます。
  • 各入力要素の名前に、そのボックス番号を追加します。たとえば、3 番目のボックスに「login」というテキスト入力要素があった場合、名前を「login3」に変更する必要があります。

これまでに作成したコードは次のとおりです。

boxes = $('.chosen');
for(a = 0; a < boxes.length; a++) {
    inputsinboxes = boxes[a].children('input');
    for(b = 0; b < inputsinboxes.length; b++) {         
        inputsinboxes[b].name = inputsinboxes[b].name + (a+1);
    }
}

関数ではないと言い続けているので、私は立ち往生していboxes[a].childrenます。

私は何を間違っていますか?

4

3 に答える 3

3

配列の添字表記(角かっこ)を使用してjQueryオブジェクトから要素にアクセスする場合、jQueryオブジェクトは返されません。基盤となるDOMノードを取得します。http://api.jquery.com/get/

を使用.each()して、これをより慣用的なjQueryにすることから始めます。

$('.chosen').each(function (i) {
    $(this).children('input').prop('name', function () {
        return this.name + (i+1);
    });
});
于 2012-12-23T19:07:54.647 に答える
3

生のJavaScriptの直感とjqueryの動作方法を混ぜ合わせています。サイズについてはこれを試してみてください

$('.chosen').each(function(index) {
    $('input', this).each(function() {
        $(this).attr('name', $(this).attr('name') + (index + 1));
    });
});
于 2012-12-23T19:08:21.603 に答える
1

boxes[a]DOMElement、jQueryオブジェクトではありません。children()そのため、jQueryメソッドを使用することはできません。

代わりに、最初にjQueryオブジェクトでラップする必要があります。

boxes = $('.chosen');
for(a = 0; a < boxes.length; a++) {
    inputsinboxes = $(boxes[a]).children('input');
    for(b = 0; b < inputsinboxes.length; b++) {         
        inputsinboxes[b].name = inputsinboxes[b].name + (a+1);
    }
}

  1. varまた、変数が暗黙のグローバルになるのを防ぐために、変数をで宣言する必要があることに注意してください。

    var boxes = $('.chosen');
    
  2. ループeach()ではなく、jQueryでより一般的な関数を使用することを検討してください。セッターとしてforの使用と関数の提供と相まって、コードを次のように短縮できます。prop()

    $('.chosen').each(function (i) {
        $(this).children('input').prop('name', function (j, curr) {
            return curr + (i+1);
        });
    });
    
于 2012-12-23T19:08:06.753 に答える