2010-02-24 23 views
6

Trong jquery 1.3.2, các công việc sau:Thiết lập một chọn bởi nhãn qua jquery trong 1,4

<select id="c"> 
    <option value="325">Red</option> 
    <option value="833">Purple</option> 
</select> 

$('#c').val('Red'); 

Và nó thay đổi lựa chọn để tùy chọn với RED như nhãn của nó. Trong jQuery 1.4 điều này không thành công. Làm thế nào tôi có thể nhận được kết quả tương tự trong 1.4? Đây có phải là lỗi trong phiên bản 1.3 không?

Trả lời

10

Bạn sẽ phải làm điều đó theo cách này:

$('option:contains("Red")', '#c')[0].selected = true 

EDIT

@Tomalak

Nếu nhãn arent lẫn nhau exclusivey bạn muốn cần phải viết lại bộ chọn:

$.fn.labselect = function(str) { 
    $('option', this).filter(function() { 
     return $(this).text() == str; 
    })[0].selected = true; 

    return this; 
}; 

// Use it like this 
$('#c').labselect('Red'); 
+0

Điều gì về ''? – Tomalak

+0

+1 ngay bây giờ. Tôi không thấy lý do để giới hạn nó thành các phần tử '

+0

Câu hỏi của tôi không đủ cụ thể, nhưng bạn vẫn trả lời, tôi cần phải chọn qua nhãn, vì vậy chức năng tùy chỉnh là cách để đi. – Stomped

-1

Hãy thử mã này:

$('#c').val("325"); 
2
$('#c').val('Red'); 

không nên có (IMHO) làm việc trong jQuery 1.3 vì "Red" không phải là giá trị. "325" là. Gì làm điều này:

$('#c').val("325"); 
+0

Không hoạt động trong 1.3.2, tại sao. – aefxx

+0

Ồ, tôi biết những gì bạn đặt sẽ làm cho nó hoạt động; nhưng tôi không có quyền truy cập, trong trường hợp này, với giá trị, tôi phải đặt nó theo nhãn. Giải pháp ngắn hạn của tôi là hạ cấp xuống jQuery 1.3.2 – Stomped

1
$('#c').val('325'); 

hoặc

// earlier - define a text-equals selector 
jQuery.extend(jQuery.expr[":"], { 
    "text-equals": function (a, i, m) { 
    return (a.textContent||a.innerText||jQuery(a).text()||'')==m[3]; 
    } 
}); 

// later - use it 
$red = $('#c option:text-equals(Red)'); 
$('#c').val($red.val()); 

Bộ chọn tùy chỉnh là một khả năng. Bạn cũng có thể thực hiện chính xác điều tương tự trong ví dụ filter() gọi lại.

Các vấn đề liên quan