4

我正在使用 jquery 将从服务器获取的 html 插入到 div 中。根据 div 内容,我想调整容器的样式。我写了一个简单的html测试。当它有 X 孩子时,我如何告诉 css 应用这个网站?谷歌搜索后,我尝试了 :has 和 :contains 都没有工作。我不想在 JS 中保留我的样式,因为 css 更有意义。

演示:http: //jsfiddle.net/wd9fk/

html

<div id="a"><div id="b">B</div></div>
<div id="a"><div id="c">C</div></div>

css

#a { height: 400px; border: 1px solid red;  }
#b { height: 200px; }
#a :has #b { height: 300px; border: 1px solid blue; }
4

4 回答 4

7

您根本无法在 CSS 中向上遍历 DOM。您将需要使用 JavaScript。

这是一篇解释原因的文章: http: //snook.ca/archives/html_and_css/css-parent-selectors

长话短说,这是由于浏览器读取 CSS 的方式,通过引入它,性能会提高 10 倍(至少!),因为它需要多次读取每个节点以看看它是否适合配置文件。

这是一个很好的想法,但它根本不可行。

于 2013-01-08T13:31:04.173 回答
4

目前还没有 CSS 的父选择器,有计划并且正在讨论中。在 CSS 选择器级别 4 中,提出了一个主题选择器,它可以让您以这种方式引用元素:

ol! > li:only-child

然后写着:“一个ol包含单个li元素的元素”(虽然这个语法是一个提议),并且可以让你设置父ol元素的样式。

如果此提议成功,主题选择器将在下一版本的 CSS 选择器中可用。

目前,Javascript 是要走的路,直到主题选择器成为标准。

于 2013-01-08T13:32:27.947 回答
0

您不能遍历 DOM 来获取当前匹配元素的父选择器。

但是你可以像这样很容易地用 jQuery 做到这一点:

$('#Default a span.active').closest('.vehicle_details').css('background-color','#444');

小提琴演示

于 2014-04-11T10:36:07.303 回答
-1
#a > #b { height: 300px; border: 1px solid blue; }

不确定这是否是您想要的,但请尝试一下。

问候。

于 2013-01-08T13:30:52.520 回答