CSS和Javascript:获取CSS自定义属性列表
CSS & Javascript: Get a list of CSS custom attributes
从这个代码:
HTML<div class="test"></div>
CSS .test {
background-color:red;
font-size:20px;
-custom-data1: value 1;
-custom-data2: 150;
-custom-css-information: "lorem ipsum";
}
与javascript -例如从一个$('.test')
-我怎么能得到一个列表的CSS属性有属性名称开头的前缀"-custom-"?(它们可以有不同的名称,但前缀总是相同的)
我想要这个:
{
customData1: "value 1",
customData2: 150,
customCssInformation: "lorem ipsum"
}
我知道我也可以使用data-
HTML属性,但由于一些非常具体的原因,我需要使用一个等价的CSS。谢谢你的帮助。
简短的回答:ie9会给你这些值。
但是,Firefox/Chrome/Safari会解析它们。
例子jsfiddle
您可以遍历文档的样式表以查找与所需选择器的匹配(注意,这可能是一个昂贵的过程,特别是在具有大型/多个CSS文件的站点上)
var css = document.styleSheets,
rules;
// loop through each stylesheet
for (var i in css) {
if (typeof css[i] === "object" && css[i].rules || css[i].cssRules) {
rules = css[i].rules || css[i].cssRules;
// loop through each rule
for (var j in rules) {
if (typeof rules[j] === "object") {
if (rules[j].selectorText) {
// see if the rule's selectorText matches
if (rules[j].selectorText.indexOf('.test') > -1) {
// do something with the results.
console.log(rules[j].cssText);
$('.test').html(rules[j].cssText);
}
}
}
}
}
}
你会注意到在ie9以外的浏览器中(没有测试ie8或更低版本),-custom-
样式已经从cssText
中删除。
这是一个可以获得自定义css属性的解决方案:
<style>
.custom-thing
{
-custom-1: one;
-custom-2: 4;
}
</style>
<a class='custom-thing' href='#' onclick='test();'>test</a>
<script>
function test() {
var valueOne = getCssValue('.custom-thing', '-custom-1');
alert(valueOne);
var valueTwo = getCssValue('.custom-thing', '-custom-2');
alert(valueTwo);
}
function getCssValue(selector, attribute) {
var raw = getRawCss(selector);
if (!raw) {
return null;
}
var parts = raw.split(';');
for (var i in parts) {
var subparts = parts[i].split(':');
if (trimString(subparts[0]) == attribute) {
return subparts[1];
}
}
return null;
}
function trimString(s) {
return s.replace(/^'s+|'s+$/g, "");
}
function getRawCss(selector) {
for (var i = 0; i < document.styleSheets.length; i++) {
var css = document.styleSheets[i].rules || document.styleSheets[i].cssRules;
for (var x = 0; x < css.length; x++) {
if (css[x].selectorText == selector) {
return (css[x].cssText) ? css[x].cssText : css[x].style.cssText;
}
}
}
return null;
}
</script>
这花了我一点时间,我以前从来不知道你能做到这一点。
很酷!
有点晚了,但我相信这是值得的,如果我也能帮助别人的话。
var css = document.styleSheets[0]; // some stylesheet
var result = [];
for (var r=0; r<css.rules.length; r++)
{
var item = { selector: css.rules[r].selectorText };
var styles = {};
for (var s in css.rules[r].style)
{
if (!isNaN(s))
{
var key = css.rules[r].style[s];
var val = css.rules[r].style[key];
styles[key] = val;
}
}
item.styles = styles;
result.push(item);
}
console.log(result);
它会打印出一个包含所有选择器及其属性的整洁的树。:)
相关文章:
- 设置自动分隔符的自定义属性
- 与ng attr myCustomAttribute匹配的自定义属性指令
- 获取自定义属性的值
- 如何创建自定义属性以添加if.bind
- 动态更新Angular2指令中自定义属性的值
- 使用jQuery更改输入字段的自定义属性
- 在 Javascript 生成的列表中,如何将自定义属性添加到 标记
- 设置 HTML 自定义属性与在 ID 属性中存储信息
- 是否可以在 Polymer 中的
节点上使用自定义属性以获得漂亮的 API - 为什么克隆节点排除自定义属性
- 将自定义属性添加到 vuejs 组件
- 使用原型对象向javascript对象添加自定义属性和方法的建议
- 正在设置自定义属性名称
- datalist获取选定的值和自定义属性(无事件)
- 如何使用javascript获取元素的自定义属性值
- 在jQuery方法中编写自定义属性的正确语法是什么
- 自定义属性jquery Datatables
- 使用 css() 更改自定义属性不起作用
- 通过 JavaScript 访问 CSS 自定义属性(又名 CSS 变量)
- CSS和Javascript:获取CSS自定义属性列表