2011-08-18 40 views
5

Có thể phát hiện hỗ trợ CSS bằng cách sử dụng Javascript không?Phát hiện khả năng CSS với Javascript

Ví dụ: có thể phát hiện xem trình duyệt có hỗ trợ bộ chọn thuộc tính như thế này không?

input[type='text'] { } 
+0

thế nào điều này sẽ có ích? Bạn phải chạy JavaScript để kiểm tra, vì vậy bạn cũng có thể chạy JavaScript để [thêm hỗ trợ cho nó] (http://selectivizr.com/). – thirtydot

+0

@thirtydot, vâng tôi biết những gì bạn đang nói, nhưng tôi đoán rằng trình duyệt ít phải làm việc trong Javascript, thì càng tốt. Nếu công cụ CSS có thể xử lý nó, tại sao lại lãng phí các chu kỳ quý giá? ;) – nickf

+1

Vì công cụ CSS (trong IE6-8) * không thể * xử lý nó. Selectivizr ngay lập tức thoát nếu trình duyệt không phải là IE6-8 (các trình duyệt phổ biến duy nhất không hỗ trợ công cụ này). Nếu không, nó sẽ chạy và thêm hỗ trợ cho một loạt các bộ chọn đáng yêu. – thirtydot

Trả lời

2
document.querySelectorAll("input[type='text']") 

Nhưng điều đó không cho các trình duyệt cũ, một cách tự nhiên.

Ngoài ra, bạn chỉ có thể sử dụng thuộc tính style để kiểm tra xem một thuộc tính CSS nhất định đã được áp dụng hay chưa.

input[type='text'] { 
    background-repeat: no-repeat; /* or any other irrelevant, non-default value */ 
} 

if (myInputElem.style.backgroundRepeat == "no-repeat") { 
    // selector is supported 
} 
+3

Bất kỳ thứ gì hỗ trợ qSA đều hỗ trợ bộ chọn '[attr]' – gnarf

+0

@gnarf: Điều đó có thể đúng. Việc kiểm tra sự tồn tại của hàm đó cũng có thể là một gợi ý, mặc dù đó không chính xác là những gì đã được yêu cầu. – Tomalak

5

Modernizr được thiết kế để phát hiện các tính năng trình duyệt và cũng có thể giúp đỡ trong trường hợp này. http://www.modernizr.com/

+0

Chỉ thực sự phát hiện nội dung mới ... '[attr]' selectors ở mọi nơi (ngoại trừ IE6) – gnarf

+0

Modernizr dùng cho HTML4 -> 5 mã hóa chuyển tiếp, không phải là bộ công cụ chung để kiểm tra khả năng trình duyệt cũ. Sử dụng sai (và imo, không chính xác) cho thư viện này. Sử dụng nó để đảm bảo rằng bạn có thể làm việc với "canvas" và các phần tử mới khác bất kể hỗ trợ HTML5, không xác minh rằng các khả năng cũ vẫn tồn tại trong trình duyệt. – Brian

3

Đây là một chút suy đoán vì tôi chưa thử nghiệm, nhưng tôi tin rằng có thể thông qua JS để thêm phần tử style tiếp theo là yếu tố có hiệu lực và sau đó kiểm tra giá trị :

đầu cơ đang chưa được kiểm tra, có thể có hoặc không hoạt động (jQuery sử dụng cho ngắn gọn):

$('<style type="text/css" id="foo">input[type="text"]{ width: 10px; }</style>').appendTo('head'); 
$('<input type="text" id="bar">').appendTo('body'); 
if ($('#bar').width() == 10) 
{ 
    //attr selector supported 
} 
$('#foo, #bar').remove(); 
+0

+1 cho cách tiếp cận, vì nó có lẽ là cách duy nhất bạn có thể phát hiện ra nó. – gnarf

+0

Đồng ý với @gnarf về điều này - ngắn của một thử bắt xung quanh querySelector hoặc một số hack khác ... – Brian

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