2013-04-18 8 views
14

wiem jak pętli poniższych wejść, szukając tych z konkretnym klasy „testerów”jQuery - Pętla przez elementy z konkretnego atrybutu

A oto jak to zrobić:

<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> 

Wystaje "John", "Smith" zgodnie z oczekiwaniami.

Nie chcę używać class="testing" i używać niestandardowego atrybutu: testdata="John".

Więc to, co bym robił:

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

Moim celem jest auto-wypełnianie wartości każdego wejścia z cokolwiek jest w środku testdata, ale tylko te wykryte mieć atrybut testdata.

To była moja nieudana próba pomocą $.each pętlę:

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

uzyskać tę odpowiedź: Uncaught TypeError: Cannot read property 'length' of undefined Czy ktoś może zobaczyć, co robię źle?

+0

marginesie: użyj '*' atrybuty teleinformatyczny, zamiast własnych składających się z nich. – ahren

+0

Czy to powszechna praktyka? Jeśli tak, to dobrze wiedzieć. Gdziekolwiek polecisz, mogę o tym przeczytać? – coffeemonitor

+0

To na pewno. Możesz przeczytać o tym http://ejohn.org/blog/html-5-data-attributes/ lub http://html5doctor.com/html5-custom-data-attributes/ – ahren

Odpowiedz

27

Tutaj jest za pomocą atrybutu HTML5 data-*:

HTML:

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

JS:

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

Tu jest wor Król: http://jsfiddle.net/SFVYw/

Jeszcze krótsza droga robi to byłoby za pomocą tego JS:

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

Wewnętrznie to robi tak samo jak inny kod JS, ale to tylko trochę bardziej zwięzłe.

+0

Szybkie dodawanie: ten kod przeszuka tylko dane wejściowe z wymaganym atrybutem danych. Musiałem skierować oba wejścia i selekcje. Zmiana pierwszego wiersza na '$ ("[test danych]") each (function() {' rozwiąże to ... –

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

working demo

+2

prosty komentarz byłby świetny do wyjaśnienia downvote –

2

jeśli chcesz wybrać wejścia z konkretną nazwą atrybutu i masz te wejścia 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'> 

można pętli na adminów tylko tak:

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

w ten sam sposób, ty pętla może tylko użytkowników:

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

dla iteracji przez wszystkie elementy z testdata na tribute i przypisywanie pola formularza z tym, co ich atrybut posiada spróbować

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

[współpracuje ze wszystkimi elementami Chyba]