Internet explorer &引用;[!IE]”等;Haml中的条件注释

Internet explorer &引用;[!IE]”等;Haml中的条件注释,internet-explorer,conditional,haml,Internet Explorer,Conditional,Haml,在HAML文件中,我有: /[if IE] This is IE /[if !IE] This is not IE 第一个条件在IE中正确计算(可能在Firefox和Chrome中,因为“This is IE”不会在这些浏览器中呈现)。但是,在Firefox或Chrome中,第二个条件的计算似乎不正确,因为没有呈现“这不是IE” 我猜我做错了什么。有什么想法吗?当使用IE条件注释时,有两种不同的类型需要注意。首先,当整个内容都在HTML注释中时(介于之间),IE会因为以下条件而读取它:

在HAML文件中,我有:

/[if IE]
  This is IE
/[if !IE]
  This is not IE
第一个条件在IE中正确计算(可能在Firefox和Chrome中,因为“This is IE”不会在这些浏览器中呈现)。但是,在Firefox或Chrome中,第二个条件的计算似乎不正确,因为没有呈现“这不是IE”


我猜我做错了什么。有什么想法吗?

当使用IE条件注释时,有两种不同的类型需要注意。首先,当整个内容都在HTML注释中时(介于
之间),IE会因为以下条件而读取它:


另一种类型不是单个注释,而是浏览器将看到的一些内容,周围有两条注释,会使IE忽略它:


这不是HTML注释,所以浏览器应该会看到它,但IE会忽略它。
(因此,代码高亮显示显示了区别——在顶部,所有内容都是灰色的,因为它们都是注释,但在这一部分,文本更暗,因为它不是注释)

仅对创建第一类有用,因为它是创建块注释语法的一部分。如果您尝试将其用于第二种(正如您在这里所做的),您会得到如下结果:


这实际上是一个无条件的评论

要使用Haml中的
[if!IE]
类型,您可能需要手动执行此操作:

%p其他一些内容
%p
这里有一些不应该出现在IE中的内容。
您也可以使用Haml,如下所示:

%p Some other content
=surround '<!--[if !IE]> -->', '<!-- <![endif]-->' do
  %p
    Here's some content that shouldn't appear in IE.
%p其他一些内容
=环绕“”,“”do
%p
这里有一些不应该出现在IE中的内容。
(如果您使用的是Rails,则需要在字符串上使用
html\u-safe
,即
round'.html\u-safe',.html\u-safe-do


如果您经常使用此功能,可能值得创建一个帮助器方法,将此调用包装到
环绕

我正在使用rails应用程序,我发现了一个小问题@matt在回答中建议的问题,我发现以下问题:

哈姆

!!!
=环绕“”。html\u安全“”。html\u安全吗
%没有js{:lang=>'en'}
%头
%身体
以下是浏览器呈现HTML的方式(在最末端没有结束标记,并将其添加到声明行本身)


..
..
所以,这里的代码对我来说很好

!!!
:plain
  <!--[if !IE]><!-->
%html.no-js{:lang => 'en'}
  / <![endif]
!!!
:普通
%没有js{:lang=>'en'}

/对于条件列表:

!!!
:plain
  <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]--><!--[if IE 7]><html class="no-js lt-ie9 lt-ie8" lang="en"><![endif]--><!--[if IE 8]><html class="no-js lt-ie9" lang="en"> <![endif]--> <!--[if IE 9]><html class="no-js lt-ie10" lang="en"> <![endif]--> <!--[if gt IE 9]><!-->
%html.no-js{:lang => 'en'}
  / <![endif]

  %head
    %title Yinlang
!!!
:普通
%没有js{:lang=>'en'}

/已经回答了,但是对于那些寻找TL的人来说;DR版本:

/[if IE]
  This will only be rendered in IE

/[if lte IE 8]
  This will only be rendered in IE 8 or less

= surround '<!--[if !IE]> -->'.html_safe, '<!-- <![endif]-->'.html_safe do
  This will only be rendered in NON-IE browsers.
/[if IE]
这将仅在IE中呈现
/[如果是lte IE 8]
这将仅在IE 8或更低版本中呈现
=环绕“”。html\u安全“”。html\u安全吗
这将仅在非IE浏览器中呈现。

实际生成的HTML是什么?这是一个很好的答案。我很惊讶你没有得到更多的选票+1.您可能需要“”.html_安全避免条件仅显示为文本确保您尊重空格@matt choice–我尝试在注释标记之间缩进%p,但这不起作用。@Jenn我完全不尊重空格-即在我的网站上实际上完全没有空格,因为只有一个空格字符显然不能在条件语句中解析@matt我对你说的话有一些疑问,但我找到了解决办法,并将其作为答案发布。你能看看它吗?如果我做错了什么,请告诉我?
!!!
:plain
  <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]--><!--[if IE 7]><html class="no-js lt-ie9 lt-ie8" lang="en"><![endif]--><!--[if IE 8]><html class="no-js lt-ie9" lang="en"> <![endif]--> <!--[if IE 9]><html class="no-js lt-ie10" lang="en"> <![endif]--> <!--[if gt IE 9]><!-->
%html.no-js{:lang => 'en'}
  / <![endif]

  %head
    %title Yinlang
/[if IE]
  This will only be rendered in IE

/[if lte IE 8]
  This will only be rendered in IE 8 or less

= surround '<!--[if !IE]> -->'.html_safe, '<!-- <![endif]-->'.html_safe do
  This will only be rendered in NON-IE browsers.