2013-04-18 23 views
14

so come ciclo tra gli ingressi di seguito, alla ricerca di quelli con una specifica classe di "tester"jQuery - Looping attraverso elementi con specifico attributo

Ed ecco come lo faccio:

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

Emette "John", "Smith" come previsto.

Non voglio utilizzare lo class="testing" e utilizzare un attributo personalizzato: testdata="John".

Quindi questo è quello che avrei fatto:

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

Il mio obiettivo è quello di popolare automaticamente i valori di ogni ingresso con tutto ciò che è dentro testdata, ma solo quelle rilevate per avere l'attributo testdata.

Questo è stato il mio tentativo fallito di usare la $.each ciclo:

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

ottengo questa risposta: Uncaught TypeError: Cannot read property 'length' of undefined chiunque può vedere quello che sto facendo di sbagliato?

+0

lato: utilizzare 'data-*' attributi, piuttosto che il proprio quelle composte. – ahren

+0

È una pratica comune? Se è così, è bene sapere. Ovunque mi raccomando, posso leggere su questo? – coffeemonitor

+0

Lo è sicuramente. Puoi leggere a riguardo http://ejohn.org/blog/html-5-data-attributes/ o http://html5doctor.com/html5-custom-data-attributes/ – ahren

risposta

27

Qui si sta usando l'attributo 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); 
}); 

Qui è wor Re: http://jsfiddle.net/SFVYw/

Un modo ancora più brevi di farlo sarebbe utilizzando questo JS:

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

Internamente sta facendo lo stesso come l'altro codice JS, ma è solo un po 'più conciso.

+0

Una rapida aggiunta: questo codice cercherà solo gli input con l'attributo dati richiesto. Avevo bisogno di indirizzare sia gli input che i select. Cambiando la prima linea in '$ ("[data-test]"). Each (function() {' lo risolve ... –

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

working demo

+2

un semplice commento sarebbe bello per spiegare downvote –

2

se si desidera selezionare gli ingressi con specifica nome dell'attributo e si dispone di questi ingressi 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'> 

è possibile loop su amministratori solo come questo:

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

per la stessa via, voi può ciclo solo per gli utenti:

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

per iterare su tutti gli elementi con testdata a tributo e assegnando i campi del modulo con quello che loro attributo detiene provare

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

[funziona con tutti gli elementi immagino] nota

Problemi correlati