2013-04-18 2 views
14

を持つ要素をループ:jQueryの - 私はそれを行う方法ですどのように以下の入力をループする、「テスター」</p> <p>の特定のクラスを持つものを検索し、ここで知っている特定の属性

<input type='text' name='firstname' class="testing" value='John'> 
<input type='text' name='lastname' class="testing" value='Smith'> 

<script type="text/javascript"> 
$(document).ready(function(){ 

$.each($('.testing'), function() { 
    console.log($(this).val()); 
}); 

}); 
</script> 

"John"、 "Smith"を期待どおりに出力します。

私はclass="testing"を使用せず、カスタム属性:testdata="John"を使用します。

だから、これは私がやっているはずだものです:

<input type='text' name='firstname' testdata='John'> 
<input type='text' name='lastname' testdata='Smith'> 

私の目標はtestdataの内部にあるものは何でもして、各入力の値を自動的に取り込むことですが、testdata属性を持つことが検出されたのみ。

これは$.eachループを使用しての私の失敗しました:

$.each($('input').attr('testdata'), function() { 
    var testdata = $(this).attr('testdata'); 
    $(this).val(testdata);  
}); 

私はこの応答を得る:Uncaught TypeError: Cannot read property 'length' of undefined誰もが私が間違ってやって を見ることができますか?

+0

サイドノート: 'データ - *'属性ではなく、あなた自身の作ったものを使用します。 – ahren

+0

それはよくあることですか?もしそうなら、それは知っているのは良いことです。どこにいても私がそれを読むことをお勧めしますか? – coffeemonitor

+0

それは確かです。 http://ejohn.org/blog/html-5-data-attributes/またはhttp://html5doctor.com/html5-custom-data-attributes/ – ahren

答えて

27

ここでは、HTML5 data-*属性使用している:ここではWORである

$("input[data-test]").each(function(){ 
    var testdata = $(this).data('test'); 
    $(this).val(testdata); 
}); 

HTML:

<input type='text' name='firstname' data-test='John'> 
<input type='text' name='lastname' data-test='Smith'> 

JSを王:http://jsfiddle.net/SFVYw/

、JS使用されるだろうことのより短い方法:

$("input[data-test]").val(function(){ 
    return $(this).data('test'); 
}); 

は、内部的には、他のJSコードと同じことをやっているが、それはほんの少しより簡潔です。

+0

すばらしい追加:このコードは、必要なデータ属性を持つ入力を介してのみ検索します。入力と選択の両方をターゲットにする必要がありました。最初の行を '$( "[data-test]")に変更します。each(function(){'これをソートします... –

3
$("input[testdata]").each(function(){ 
    alert($(this).attr('testdata')); 
// do your stuff 
}); 

working demo

+2

簡単なコメントはdownvoteを説明するのが偉大であろう –

2

あなたが特定の属性名を指定して入力を選択したいとあなたはこれらのHTMLの入力を持っている場合のみ:このような管理者の

<input type='text' name='user1' fieldname="user" class="testing" value='John1'> 
<input type='text' name='user2' fieldname="user" class="testing" value='Smith1'> 
<input type='text' name='admin1' fieldname="admin" class="testing" value='John2'> 
<input type='text' name='admin2' fieldname="admin" class="testing" value='Smith2'> 

することができますループ:

$("input[fieldname='admin']").each(function(){ 
    alert($(this).val()); 
}); 

同じ方法によって、あなたはできる唯一のユーザーのためのループ:

$("input[fieldname='user']").each(function(){ 
    alert($(this).val()); 
}); 
2

testdataですべての要素を反復処理するためにトリビュートとその属性が

$("[testdata]").each(function(){ 
    $(this).val($(this).attr('testdata')) 
}) 

を試してみてください保持しているものとのフォームフィールドを割り当てる[私は推測するすべての要素で動作します]

関連する問題