CSS by data属性不会刷新/重新绘制
CSS by data-attribute will not refresh/repaint
在HTML5/JS应用程序中,我们有一个视图,其某些样式取决于元素的data-attribute
:
像
<li data-level="0"></li>
或
<li data-level="1"></li>
CSS
li[data-level^="1"] {
/* some styles */
}
这似乎在page reload
上的任何地方都能正常工作。
但是,当数据属性通过JS以编程方式设置时,CSS属性会在所有相关的桌面浏览器中呈现,但不会在移动safari中呈现。
JS部分看起来像这样:
this.$el.attr('data-level', this.model.getLevel())
关于如何强制应用这些属性(刷新/重新绘制某些内容),有什么想法吗?
我希望避免使用class属性和不同的类,因为事情比这里显示的更复杂。。。
好吧,在所有浏览器中,更改数据属性似乎并不会触发元素的重绘!?
但是,更改class
属性确实有效。这是一种变通方法,但确实有效。
this.$el
.attr('data-level', this.model.getLevel())
.addClass('force-repaint')
.removeClass('force-repaint');
如图所示:在Safari中更改数据属性,但屏幕不会重新绘制为新的CSS样式
在我的案例中,我使用的是icomoon生成的字体图标,并使用数据属性data-icon
动态更改HTML实体。
在页面重新加载时,它将与以下css协同工作:
[data-icon]:before {
content: attr(data-icon);
}
但是没有重新加载,甚至通过更改类,它也没有改变,只是显示了代码。
<span class="font-icon" data-icon=""></span>
对我有效的是使用这个函数,我将其编辑为以下内容(假设code
为e901
):
export class StringUtils {
static emptyElement = document.createElement('div');
static fontCodeToSymbol(code: string): string {
let element = StringUtils.emptyElement;
let symbol: string | nullable = `&#x${code};`;
if (symbol && typeof symbol === 'string') {
element.innerHTML = symbol;
symbol = element.textContent;
element.textContent = '';
}
return symbol || '';
}
}
它将直接在data-icon
:中提供正确的字符
<span class="font-icon" data-icon=""></span>
相关文章:
- 使用新参数通过服务器端处理重新绘制引导数据表
- 在新窗口中打开时,未在画布中绘制图像
- 在新框架上绘制图像,同时仍然使用P5.js中的利萨茹曲线
- 将许多新图像绘制到画布时内存泄漏
- 有没有一种好方法可以添加新框并使用 javascript 重新绘制画布
- 谷歌地图多边形 - 添加新点后重新绘制
- 需要使用新数据重新绘制地图(与CartoDB.js结合使用)
- 使用单击功能绘制新的动态JS多边形
- HTML5 画布 - 使用剪辑擦除新圆圈后重新绘制新圆圈
- 使用数据表(Meteor Tabular)在新行中绘制数组的每个元素
- 将json中的数据合并到一个新的数组中,并使用d3.js绘制形状
- 如何加载新图像并将其绘制到画布上
- 使用阶梯将绘制的形状移动到新的Y
- 单击按钮打开一个新窗口,并用D3绘制多个大圆
- 谷歌地图v3方向渲染器重新绘制响应
- 删除以前的路线,并绘制一个新的路线
- 画布-只绘制时,悬停在新的瓷砖,而不是整个画布
- 如何将前一个函数的结果绘制到JavaScript中的新函数中
- 如何绘制画布到新的html页面
- 绘制新形状时删除DrawingManager形状