HTML有data-*
属性,这些属性是用于存储的,并且根据定义对元素的布局或表示没有影响。CSS有这样的属性吗?
这里有一个例子(它实际上并不起作用,只是我的想法):
<style type="text/css">
#foo { data-bar: 'hello world'; }
</style>
<div id="foo">i'm an element</div>
<script type="text/javascript">
var element = document.getElementById('foo'),
style = window.getComputedStyle(element),
data_bar = style.getPropertyValue('data-bar');
console.log(data_bar);
</script>
如果没有,是否有任何CSS properties可以更改为任意值而不影响任何匹配元素?
编辑:我认识到这不是CSS的目的,而且肯定有更好的方法来实现这一点--但我想知道这是否可能。
5条答案
按热度按时间b4lqfgs41#
你可以在一些未使用的属性中写入无效的css,大多数浏览器会忽略它,但它仍然可以通过javascript检索。也就是说,我永远不会这样做。
f4t66c6m2#
实际上,没有理由这样做-HTML是为了结构,CSS是为了样式,JS是为了交互。如果有必要的话,你应该把数据存储在JavaScript中的一个单独的全局变量中,或者使用jQuery:
这种方法会得到更多的支持,而且不太可能意外地把事情搞砸。更多信息,请参阅this documentation。如果你愿意,你可以尝试其他库或其他方式来使用JS,但我不推荐使用CSS来存储数据--尽管它看起来有点像JSON,存储并不是它设计的目的。
使用CSS存储就像在HTML中单独设置所有元素的样式,在HTML中定义所有函数,或者从脚本中设置所有样式。这是不好的做法,会使代码不可维护,有缺陷,不可靠。千万不要这样做!
cotxawn73#
您可能不应该将数据绑定到DOM,因为这将导致代码无法管理。DOM应该主要用于表示或用户输入。
但是,最好的方法可能是使用jQuery的$.data()。
另一种实现方式(可以避免捆绑数据)是将程序结构分离为模型和视图。
是的。
如果模型-视图实现引起了您的兴趣,请查看Backbone.js。模型-视图方法的组织优势远远超过了$.data()或类似技巧的便利性。
z5btuh9x4#
您可以在CSS和jQuery中使用
role="whatever"
,而不会影响布局。kx5bkwkv5#
您可以使用
content
属性来达成此目的,因为它只会影响:before
或:after
之类的虚拟元素,而不会影响其他项目:我无法想象任何可能的用例,但这可能是一个无害的解决方案。