2009-07-27 31 views
212
<input type="checkbox" name="filter" id="comedyclubs"/> 
<label for="comedyclubs">Comedy Clubs</label> 

Nếu tôi có hộp kiểm có nhãn mô tả nó, làm cách nào tôi có thể chọn nhãn bằng jQuery? Nó sẽ dễ dàng hơn để cung cấp cho thẻ nhãn một ID và chọn nó bằng cách sử dụng $(#labelId)?Bộ chọn jQuery cho nhãn của hộp kiểm

Trả lời

386

này nên làm việc:

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

Xem thêm: Selectors/attributeEquals - jQuery JavaScript Library

+3

Đối với trình duyệt Webkit (Safari/Chrome), bạn có thể thực hiện '$ ('# comedyclubs') [0] .labels' để truy cập tất cả các nhãn được gán cho' # comedyclubs'. – Matt

+1

Sử dụng .text() để chuyển đối tượng thành chuỗi: alert ($ ("label [for = 'comedyclubs']"). Text()); – Loren

+0

chỉ cần sử dụng $ ("label [for = 'comedyclubs']") sẽ cho bạn giá trị nhưng nó sẽ làm cho nhãn trống. vì vậy, hãy sử dụng $ ("label [for = 'comedyclubs']"). text() – shahil

40

này nên làm điều đó:

$("label[for=comedyclubs]") 

Nếu bạn có các ký tự không tự chữ và số trong id của bạn thì bạn phải bao quanh attr giá trị có dấu ngoặc kép:

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

Lạ lùng cách danh tiếng SO xuất hiện khi câu trả lời này được gửi cùng phút với câu trả lời hàng đầu. :) – sscirrus

+3

@sscirrus điểm internet duy nhất của nó :) –

5

Một giải pháp khác có thể là:

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

đây có thể không phải là giải pháp ổn định nhất vì nó yêu cầu nhãn phải luôn là mục tiếp theo sau hộp kiểm. một thiết kế lại đồ họa có thể phá vỡ logic này. – Kip

+3

đúng!nhưng trong trường hợp này hoạt động tốt: D và cho litle phiên bản an toàn hơn, chúng tôi có thể xác định .next ('label'), hoặc .prev ('label'). – Briganti

+0

Một cải tiến ổn định nhỏ sẽ là: '$ (" # comedyclubs "). NextAll(). First()' – sscirrus

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

này sẽ cho phép bạn chọn nhãn cho tất cả các lĩnh vực trong một vòng lặp là tốt. Tất cả những gì bạn cần đảm bảo là các nhãn của bạn nên nói là for='FIELD' trong đó FIELD là id của trường mà nhãn này đang được xác định.

+4

Đây là câu trả lời tuyệt vời cho bất kỳ ai có nhiều hơn một trường. Câu trả lời này phải là # 1. –

0

Cảm ơn Kip, đối với những người có thể tìm kiếm để đạt được cùng sử dụng $ (this) trong khi lặp lại hoặc liên kết trong một hàm:

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

Tôi nhìn trong chốc lát khi làm việc dự án này nhưng không thể tìm một ví dụ tốt vì vậy tôi hy vọng điều này sẽ giúp những người khác có thể tìm cách giải quyết cùng một vấn đề.

Trong ví dụ trên, mục tiêu của tôi là ẩn đầu vào radio và tạo kiểu cho nhãn để cung cấp trải nghiệm người dùng slicker (thay đổi hướng của sơ đồ).

Bạn có thể see an example here

Nếu bạn thích ví dụ, đây là 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;} 

và phần liên quan của JavaScript:

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

Một gốc xen kẽ với bản gốc câu hỏi, với nhãn sau đầu vào, bạn có thể đi với một giải pháp css tinh khiết và tránh sử dụng JavaScript hoàn toàn ...:

input[type=checkbox]:checked+label {} 
Các vấn đề liên quan