2012-02-02 28 views
30

Trong một doc HAML, tôi có:"[IE!]" Ý kiến ​​có điều kiện trong Haml

/[if IE] 
    This is IE 
/[if !IE] 
    This is not IE 

Các đánh giá lại có điều kiện đầu tiên đúng trong IE (và có lẽ trong Firefox và Chrome, như "Đây là IE" không không hiển thị trong các trình duyệt đó). Tuy nhiên, điều kiện thứ hai dường như không đánh giá đúng trong Firefox hoặc Chrome, vì "Đây không phải là IE" không được hiển thị.

Tôi đoán tôi đã làm điều gì sai. Bất kỳ ý tưởng?

+0

HTML được tạo ra thực tế là gì? –

+0

Trả lời

91

Khi sử dụng bình luận có điều kiện của IE, có hai loại khác nhau bạn cần biết. Thứ nhất, khi toàn bộ nội dung bên trong một nhận xét HTML (giữa <!---->), nhưng IE sẽ đọc nó vì điều kiện:

<!--[if IE]> 
    This is inside a HTML comment, so most browsers will ignore it, but IE will 
    interpret it. 
<![endif]--> 

Các loại khác là không một bình luận duy nhất, nhưng một số nội dung mà trình duyệt sẽ thấy, được bao bọc bởi hai ý kiến ​​đó sẽ làm cho IE bỏ qua nó:

<!--[if !IE]> --> 
    This is not a HTML comment, so browsers should see it, but IE will ignore it. 
<!-- <![endif]--> 

(đang làm nổi bật SO cho thấy sự khác biệt - trong một tất cả mọi thứ trên cùng là màu xám vì nó là tất cả bình luận, nhưng trong vụ việc này các văn bản đậm vì nó không phải là một bình luận).

The Haml support for IE conditional comments chỉ hữu ích khi tạo loại đầu tiên vì đây là một phần của cú pháp để tạo nhận xét chặn. Nếu bạn thử sử dụng nó cho loại thứ hai (như bạn có ở đây), bạn sẽ nhận được một cái gì đó như:

<!--[if !IE]> 
    This is inside a HTML comment, so other browsers will ignore it. 
    IE will also ignore it, as the conditional states !IE. 
    So everything ignores it. 
<![endif]--> 

đó là một bình luận vô điều kiện một cách hiệu quả.

Để sử dụng các loại [if !IE] trong Haml, có thể bạn sẽ phải làm điều đó bằng tay:

%p Some other content 
<!--[if !IE]> --> 
%p 
    Here's some content that shouldn't appear in IE. 
<!-- <![endif]--> 

Bạn cũng có thể tận dụng các Haml surround helper, như thế này:

%p Some other content 
=surround '<!--[if !IE]> -->', '<!-- <![endif]-->' do 
    %p 
    Here's some content that shouldn't appear in IE. 

(Nếu bạn đang sử dụng Rails thì bạn sẽ cần phải sử dụng html_safe trên các chuỗi, tức là surround '<!--[if !IE]> -->'.html_safe, '<!-- <![endif]-->'.html_safe do).

Nếu bạn đang sử dụng rất nhiều, có thể đáng để tạo phương thức trợ giúp kết thúc cuộc gọi này đến surround.

+2

Đây là một câu trả lời tuyệt vời. Tôi ngạc nhiên khi bạn không nhận được nhiều upvotes hơn cho nó. +1! – sscirrus