2011-12-28 68 views
7

使用Drupal,该主题具有指定给<HTML>元素的背景颜色。我为一个特定页面创建了一个单独的print CSS,并希望在用户打印页面时仅删除此页面的背景颜色。 <HTML>元素没有类或id,但<BODY>元素具有。如何从特定类别的BODY元素中定位HTML元素

<HTML style="background-color:#666"> 
    <BODY class=specialPage> 
    </body> 
</html> 

有没有办法指定我想要<BODY>的父元素?或根据<BODY>的类别定位<HTML>的某种方式?

编辑:

|------------------------| 
|   <HTML>   | 
|  |----------|  | 
|  |   |  | 
|  | <BODY> |  | 
|  |   |  | 
|  |----------|  | 
|      | 
|------------------------|  

回答

4

在jQuery中,你可以做到以下几点:

$('body.specialPage').parent('html').css({'background-color': 'white'}); 

这将工作的另一个元素是否包含body与否。

这里是working jsFiddle

此外,您应该使用小写字母为您的html元素,html而不是HTML

+0

无需使用地图语法'CSS()'sinice你只改变一个属性。 – Purag 2011-12-28 20:47:46

+0

我倾向于使用该语法,因为我稍后可能会添加更多属性,因此它往往会使我的代码库更易于维护。只是个人喜好。 – 2011-12-28 20:49:00

+0

这可能是它必须工作的方式。 – Mechaflash 2011-12-28 21:23:17

3
$("body.specialPage") 
    .closest("html") 
    .css("background-color",""); 

第一行针对的是具有特殊类的body元素。然后,我们选择它的父级HTML标签并“移除”它的背景颜色。美的是,如果该类没有专门设置为你正在寻找的那个类,它将不会选择父HTML。

这也将工作:

if($("body").hasClass("specialPage")){ 
    $("html").css("background-color",""); 
} 

jQuery的hasClass()返回一个布尔值(true如果有类和false如果事实并非如此),所以身体标记有你要找的类,它将运行if函数中的代码,该代码再次从HTML标签中“移除”背景颜色。

3

你可以尝试重写从与!重要修改HTML标记的背景颜色样式..

<HTML style="background-color:#666"> 
    <BODY class=specialPage style="background-color:#123 !important"> 
    </body> 
</html> 
+0

这可能是首选的方法,因为造型真的不应该发生在JavaScript中。 +1 – 2011-12-28 20:50:06

+0

在我的问题中创建了一个编辑。除了其余的默认样式外,这将起作用。 – Mechaflash 2011-12-28 21:22:23