通过 jQuery 设置 CSS 反增量
Set CSS counter-increment via jQuery
我想使用 jQuery 在“.demo:before
”上设置 CSS counter-increment 属性。
问题是jQuery 无法访问伪元素。另一个 S.O。答案(我现在似乎找不到)建议设置一个数据属性,然后在 CSS 中使用该值,但这也不起作用。这是可以完成的事情吗?
简化示例:http://jsfiddle.net/4h7hk8td/
HTML:
<ul class="demo">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
JS:
// 1) User Sets Unit Size
var myUnit = 100;
// 2) Unit size is saved via data attribute
$('.demo li').attr('data-unit', myUnit);
CSS:
.demo {
counter-reset: list;
}
.demo li:before {
/* 3) CSS gets data attribute and applies as the increment. Not working :( */
counter-increment: list attr(data-unit);
content: counter(list);
}
为每个 li
而不是 :before
递增计数器:http://jsfiddle.net/7vt0kf2c/.
var myUnit = 100;
$(".demo li").css("counter-increment", "list " + myUnit);
$("button").click(function(e) {
$(".demo li").css("counter-increment", "list " + 200);
});
您实际上可以使用 css 预处理器来编译 css。
我在下面给出一个例子,使用 scss:
它实际上为传递的数字呈现不同的计数器增量。如果您已经知道用于递增的值,则此解决方案将起作用。例如,如果传递的值是 100
、200
和 300
,那么您可以使用 @each
loop 为这些已知数字编译 css。
如果您至少知道传递的值的范围,则可以使用 @for loop
(在数量有限时使用它)。
$values: 100, 200, 300;
@each $i in $values {
.demo[data-num="#{$i}"]{
& > li::before{
counter-increment: list #{$i};
}
}
}
.demo {
counter-reset: list;
}
.demo li:before {
content: counter(list);
}
Working Fiddle(将 data-num
属性值更改为 200 或 300)
这里是编译好的css:
.demo[data-num="100"] > li::before {
counter-increment: list 100;
}
.demo[data-num="200"] > li::before {
counter-increment: list 200;
}
.demo[data-num="300"] > li::before {
counter-increment: list 300;
}
.demo {
counter-reset: list;
}
.demo li:before {
content: counter(list);
}
鉴于公认的答案,没有CSS的净效果基本相同:
var myUnit = 100;
$('.demo').data('unit', myUnit);
$('.demo li').each(function () {
$(this).text($('.demo').data('unit') * ($(this).index() + 1));
});
我想使用 jQuery 在“.demo:before
”上设置 CSS counter-increment 属性。
问题是jQuery 无法访问伪元素。另一个 S.O。答案(我现在似乎找不到)建议设置一个数据属性,然后在 CSS 中使用该值,但这也不起作用。这是可以完成的事情吗?
简化示例:http://jsfiddle.net/4h7hk8td/
HTML:
<ul class="demo">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
JS:
// 1) User Sets Unit Size
var myUnit = 100;
// 2) Unit size is saved via data attribute
$('.demo li').attr('data-unit', myUnit);
CSS:
.demo {
counter-reset: list;
}
.demo li:before {
/* 3) CSS gets data attribute and applies as the increment. Not working :( */
counter-increment: list attr(data-unit);
content: counter(list);
}
为每个 li
而不是 :before
递增计数器:http://jsfiddle.net/7vt0kf2c/.
var myUnit = 100;
$(".demo li").css("counter-increment", "list " + myUnit);
$("button").click(function(e) {
$(".demo li").css("counter-increment", "list " + 200);
});
您实际上可以使用 css 预处理器来编译 css。
我在下面给出一个例子,使用 scss:
它实际上为传递的数字呈现不同的计数器增量。如果您已经知道用于递增的值,则此解决方案将起作用。例如,如果传递的值是 100
、200
和 300
,那么您可以使用 @each
loop 为这些已知数字编译 css。
如果您至少知道传递的值的范围,则可以使用 @for loop
(在数量有限时使用它)。
$values: 100, 200, 300;
@each $i in $values {
.demo[data-num="#{$i}"]{
& > li::before{
counter-increment: list #{$i};
}
}
}
.demo {
counter-reset: list;
}
.demo li:before {
content: counter(list);
}
Working Fiddle(将 data-num
属性值更改为 200 或 300)
这里是编译好的css:
.demo[data-num="100"] > li::before {
counter-increment: list 100;
}
.demo[data-num="200"] > li::before {
counter-increment: list 200;
}
.demo[data-num="300"] > li::before {
counter-increment: list 300;
}
.demo {
counter-reset: list;
}
.demo li:before {
content: counter(list);
}
鉴于公认的答案,没有CSS的净效果基本相同:
var myUnit = 100;
$('.demo').data('unit', myUnit);
$('.demo li').each(function () {
$(this).text($('.demo').data('unit') * ($(this).index() + 1));
});