【发布时间】:2019-03-11 23:15:27
【问题描述】:
我正在尝试使用 CSS 通配符选择器设置 div 的样式。所以我做了div[class^="list_"]。但是下面的代码不起作用
$('.box2').addClass(function() {
return 'list_' + $('.box1 li').length;
});
div[class^="list_"] {
color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="box1">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<div class="box2">text</div>
但是当我这样做时
div[class^=".box2 list_"] {
color: red;
}
它会影响风格。我的理解是div 有一个以list_ 开头的类将具有这种风格。但无法理解为什么我需要在这个通配符选择器中添加.box2
【问题讨论】:
-
依赖
class属性以任何特定顺序列出类是非常脆弱的。^=运算符意味着您希望class值以某个字符串开始。您说的代码实际上不起作用,因为“box2”之前的.,但没有它,因为.addClass()将所需的类属性内容附加到属性值的end。 -
您的选择器试图在类属性值的开头与
^=匹配。试试*=,它会在类属性值的任何地方寻找匹配项。 -
您最好添加 两个 类:一个表示
<div>已受到影响,如“has_list”,另一个用于具体计数你现在有。这样你就可以把你的 CSS 选择器写成div.has_list -
这就是属性选择器的问题,虽然@hungerstar 的评论会解决你的问题,但你也会遇到另一个问题,它也可能匹配
list_not-needed-to-be-style或a-list_1之类的类。我会用尖尖的 2 个单独的类的评论去
标签: javascript jquery html css css-selectors