2013-04-18 8 views
14

Ich weiß, wie unten durch die Eingänge Schleife, für diejenigen, die mit einer bestimmten Klasse von „Testern“ gesuchtjQuery - Looping durch Elemente mit bestimmtem Attribute

Und hier ist, wie ich das tun:

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

Er gibt "John", "Smith" wie erwartet aus.

Ich möchte nicht die class="testing" verwenden und ein benutzerdefiniertes Attribut verwenden: testdata="John".

So ist es das, was ich würde tun:

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

Mein Ziel ist es, Auto-bevölkern die Werte von jedem Eingang mit dem, was im Inneren ist testdata, sondern nur diejenigen, die testdata Attribut haben erkannt.

Das war mein gescheiterter Versuch an die $.each Schleife:

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

ich diese Antwort: Uncaught TypeError: Cannot read property 'length' of undefined Kann jemand sehen, was ich falsch mache?

+0

Seite Hinweis: Verwenden Sie 'Daten- *' Attribute, anstatt Ihre eigenen diejenigen aus. – ahren

+0

Ist das übliche Praxis? Wenn ja, das ist gut zu wissen. Überall, wo du es empfehlen würdest, kann ich darüber nachlesen? – coffeemonitor

+0

Es ist sicher. Sie können darüber lesen http://ejohn.org/blog/html-5-data-attributes/ oder http://html5doctor.com/html5-custom-data-attributes/ – ahren

Antwort

27

Hier wird es mit dem HTML5 data-* Attribut:

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); 
}); 

Hier ist sie wor König: http://jsfiddle.net/SFVYw/

Eine noch kürzere Art und Weise tun würde mit diesem JS:

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

Intern ist es das gleiche wie der andere JS-Code zu tun, aber es ist nur ein wenig mehr prägnant.

+0

Ein schneller Zusatz: Dieser Code wird nur durch Eingänge mit dem erforderlichen Datenattribut suchen. Ich musste beide Eingaben und Auswahlen zielen. Ändern der ersten Zeile zu '$ ("[data-test]"). Je (function() {' wird das aussortieren ... –

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

working demo

+2

ein einfacher Kommentar wäre großartig, um zu erklären, –

2

wenn Sie Eingaben mit bestimmten Attributnamen auszuwählen, und Sie haben diese HTML-Eingänge:

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

kann man nur so an admins Schleife:

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

von der gleichen Art und Weise, Sie kann nur für Benutzer-Schleife:

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

für alle Elemente mit testdata iterieren an Tribut und die Zuordnung von Formularfeldern mit dem, was ihr Attribut hält

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

versuchen [arbeitet mit allen Elementen i erraten]