0

2つの行があり、それぞれに2つのテキスト入力があります。クラス「myRow」を使用して各行を調べ、各行内でクラス「This」を持つ最初の子を取得するにはどうすればよいですか?行1の最初の「This」クラスを取得できますが、行2を取得できないようです。

私のフィドル

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<script src="http://code.jquery.com/jquery-1.8.1.js"></script>

<script type="text/javascript">

$(document).ready(function(){

$('#btn').click(function(){
    $(".myRow").each(function(){
        var r = $(".This").eq(0).val();
        alert(r);
    });
});

});
</script>

</head>


<body>

<div class="myRow">
    <input type="text" class="notThis" value="wrong!"/>
    <input type="text" class="This" value="first one!"/>
    <input type="text" class="This" value="almost!"/>
</div>

<br>
<br>

<div class="myRow">
    <input type="text" class="notThis" value="wrong!"/>
    <input type="text" class="This" value="second one"/>
    <input type="text" class="This" value="almost!"/>
</div>


<button id="btn">Submit</button>
</body>
</html>
4

6 に答える 6

3
$('#btn').click(function(){
    $(".myRow").each(function(){
        var r = $(".This:first", this).val();
        alert(r);
    });
});
于 2013-02-18T16:56:03.273 に答える
3
$('.This:eq(0)','.myRow').css('background-color','#F00');

$('.myRow').find('.This:eq(0)').css('border-color','#F00');

$('.This:first','.myRow').css('color','#0F0');

$('.myRow').find('.This:first').css('font-weight','bold');

実例

于 2013-02-18T16:56:04.223 に答える
3
$('#btn').click(function(){
    $(".myRow").each(function(){
        var r = $(".This", this).eq(0).val();
        alert(r);
    });
});

両方をセレクターに入れるには、いつでも次のようにすることができます。

var elems = $('.This:eq(0)', '.myRow');

次に、これを実行して値の配列を取得できます。

var values = $.map($('.This:eq(0)', '.myRow'), function(el) {return el.value});

フィドル

于 2013-02-18T16:56:21.790 に答える
1

への変更:

デモ

var r = $(this).find(".This").eq(0).val();

.This現在の要素を基準にして探す必要があります。そうしないと、常に最初のインスタンスが見つかります。

補足:代わりに.eq(0)を使用できます.first()

于 2013-02-18T16:56:16.923 に答える
0

jQueryのファクトリメソッドを使用して特定のプロパティを検索することにより、JavaScriptオブジェクトの配列を取得できます。例:

var search = $('input[class="This"]');

次のものを使用するだけで、最初に見つかったものにアクセスできます。

search[0];

基本的に(そしてこれはそれを行うための最も最適化された方法ではありません)、あなたはこれを行うことができます:

var rows = $('.myRow');
for(var i = 0; i < rows.length; i++) {
    var first;
    var row = $(rows[i]);
    var children = row.find('input[class="This"]');
    // You can also do row.find('input.This');

    if(children.length > 0) {
        first = children[0];

        // Do something with it
    }
}

私が言ったように、最適な方法ではありませんが、ファクトリメソッドを使用するたびに、オブジェクトの配列を取得し、それらをループすることができます。

上記のようなHTMLプロパティを検索できます。

例:

$('input[type="button"]')
$('input[name="firstName"]')
$('a[href="www.google.com"]')
于 2013-02-18T17:03:35.870 に答える
-2

これでうまくいくはずです:

$('#btn').click(function(){
    $(".myRow input:nth-child(1)").each(function(){
        alert($(this).val());
    });
});
于 2013-02-18T16:56:48.187 に答える