2013-03-20 4 views
7

Ich habe eine Seite, die dynamisch erstellt wird. Es kann wie so eine Reihe von verschiedenen Radiobuttons mit IDs hat:jQuery Selector Hilfe - wie Element, deren ID beginnt und endet mit bestimmten Zeichen

<input type="radio" id="cc-radio-opt-0" /> 
<input type="radio" id="cc-radio-opt-1" /> 
<input type="radio" id="gc-radio-opt-0" /> 
<input type="radio" id="gc-radio-opt-1" /> 

Um Änderungsfunktionen zu schreiben, ich bin so etwas wie dies zu tun:

$('[id^=cc-radio-opt-]').live("change", function() { 
    var idx = $(this).attr('id').split('-').pop(); 
}); 

Diese gut funktioniert. Aber jetzt muss ich innerhalb dieser Change-Funktion eine Reihe anderer verwandter Felder verstecken. Sie werden wie folgt benannt:

<input type="text" id="cc-number-0" /> 
<input type="text" id="cc-month-0" /> 
<input type="text" id="gc-number-0" /> 
<input type="text" id="gc-month-0" /> 
<input type="text" id="cc-number-1" /> 
<input type="text" id="cc-month-1" /> 
<input type="text" id="gc-number-1" /> 
<input type="text" id="gc-month-1" /> 

Ich brauche alle Felder greifen zu können, deren IDs beginnen mit „cc“ und mit der gleichen Anzahl wie die Radio-Button beenden, die durch die idx Variable (bestimmt ist angeklickt worden. ich weiß, ich kann alle Felder erhalten, indem sie diese mit „cc“ beginnen:

$('[id^=cc-]'); 

Aber wie kann ich zeigen auch, dass sie mit dem, was beenden müssen idx ist mit anderen Worten, wenn die cc-radio-opt-1 Radio ist? geklickt, wie bekomme ich nur cc-number-1 und cc-month-1?

+0

Nein, sie sind nicht IDs duplizieren. Wenn Sie genauer hinschauen, sehen Sie, dass eine Gruppe mit cc beginnt und die andere mit gc beginnt. – EmmyS

+1

für zukünftige Referenz. .live ist veraltet http://api.jquery.com/live/ Sie sollten .on statt http://api.jquery.com/on/ – iAmClownShoe

+0

@iAmClownShoe - ich bin mir bewusst, aber aufgrund Mit dem CMS, mit dem wir arbeiten, stecken wir mit einer älteren Version von jQuery fest. – EmmyS

Antwort

3

Filtern Sie Ihren Selektor mit dem Auswahlknopf "endet mit".

http://api.jquery.com/attribute-ends-with-selector/

$('[id^="cc-"]').filter('[id$="idx"'); 

Und stellen Sie sicher, Anführungszeichen enthalten.

+0

ist '.filter()' schneller als '$ ('[id^= cc -] [id $ = 1]')'? –

+0

@mpapec Möglicherweise, aber das wäre eine Mikro-Optimierung. Verwenden Sie die für Ihre Anwendung am besten geeignete Methode. –