2009-07-27 8 views

Antwort

386

Dies sollte funktionieren:

$("label[for='comedyclubs']") 

Siehe auch: Selectors/attributeEquals - jQuery JavaScript Library

+3

Für Webkit-Browser (Safari/Chrome) können Sie '$ (# # comedyclubs) [0] .labels' verwenden, um auf alle Labels zuzugreifen, die # # comedyclubs zugeordnet sind. – Matt

+1

Verwenden Sie .text(), um ein Objekt in einen String zu konvertieren: alert ($ ("label [for = 'comedyclubs']"). Text()); – Loren

+0

einfach mit $ ("label [for = 'comedyclubs']") erhalten Sie den Wert, aber es wird das Etikett leer. also, benutze $ ("label [für = 'comedyclubs']"). text() – shahil

40

Dies sollte es tun:

$("label[for=comedyclubs]") 

Wenn Sie nicht alphanumerische Zeichen in Ihrer ID haben, dann müssen Sie die attr umgeben Wert mit Anführungszeichen:

$("label[for='comedy-clubs']") 
+2

Seltsam wie SO Reputation geht, wenn diese Antwort die gleiche Minute wie die führende eingereicht wurde. :) – sscirrus

+3

@sscirrus seine einzigen Internet-Punkte :) –

5

Eine andere Lösung könnte sein:

$("#comedyclubs").next() 
+12

Dies ist möglicherweise nicht die stabilste Lösung, da es erfordert, dass das Etikett immer das nächste Element nach dem Kontrollkästchen sein. Ein grafisches Redesign könnte diese Logik durchbrechen. – Kip

+3

richtig!aber in diesem Fall funktioniert gut: D und für kleinere sicherere Version können wir .next ('label') oder .prev ('label') definieren. – Briganti

+0

Eine geringfügige Stabilisierungsverbesserung wäre: '$ (# # comedyclubs). NextAll(). First()' – sscirrus

60
$("label[for='"+$(this).attr("id")+"']"); 

Diese Sie Etiketten für alle Felder in einer Schleife als auch wählen lassen sollte. Alles, was Sie sicherstellen müssen, ist, dass Ihre Etiketten for='FIELD' lauten sollen, wobei FIELD die ID des Feldes ist, für das diese Bezeichnung definiert wird.

+4

Dies ist eine großartige Antwort für jeden, der mehr als ein Feld hat. Diese Antwort sollte # 1 sein. –

0

Dank Kip, für diejenigen, die möglicherweise suchen die gleichen mit $ (this), während Iterieren oder Zuordnen innerhalb einer Funktion zu erreichen:

$("label[for="+$(this).attr("id")+"]").addClass("orienSel"); 

ich eine Zeit lang sah während dieses Projekt arbeiten, aber nicht konnte finde ein gutes Beispiel, also hoffe ich, dass dies anderen hilft, die das gleiche Problem lösen möchten.

Im obigen Beispiel bestand mein Ziel darin, die Radioeingaben zu verbergen und die Beschriftungen so zu gestalten, dass die Benutzerfreundlichkeit verbessert wurde (die Ausrichtung des Flussdiagramms änderte sich).

Sie können see an example here

Wenn Sie das Beispiel möchten, hier ist die CSS:

.orientation {  position: absolute; top: -9999px; left: -9999px;} 
    .orienlabel{background:#1a97d4 url('http://www.ifreight.solutions/process.html/images/icons/flowChart.png') no-repeat 2px 5px; background-size: 40px auto;color:#fff; width:50px;height:50px;display:inline-block; border-radius:50%;color:transparent;cursor:pointer;} 
    .orR{ background-position: 9px -57px;} 
    .orT{ background-position: 2px -120px;} 
    .orB{ background-position: 6px -177px;} 

    .orienSel {background-color:#323232;} 

und der relevante Teil des JavaScript:

function changeHandler() { 
    $(".orienSel").removeClass("orienSel"); 
    if(this.checked) { 
     $("label[for="+$(this).attr("id")+"]").addClass("orienSel"); 
    } 
}; 

Eine alternative Wurzel zum Original Frage, wenn das Etikett folgt die Eingabe, könnten Sie mit einer reinen CSS-Lösung gehen und vermeiden Sie die Verwendung von JavaScript insgesamt ...: