获取元素';使用JavaScript创建自定义css属性(-mystyle)
在某些元素具有自定义CSS属性的应用程序中,有没有办法通过JavaScript检索此类值 e、 g获取元素';使用JavaScript创建自定义css属性(-mystyle),javascript,css,Javascript,Css,在某些元素具有自定义CSS属性的应用程序中,有没有办法通过JavaScript检索此类值 e、 g 但这些不适用于自定义属性。是否支持此功能?将未识别的CSS属性放在style属性或style.cssText属性中时将被忽略 如果要在特定元素上定义属性,我建议: HTML: 你不能使用数据-*属性(html5)? 这至少是有效的,不是一个奇怪的黑客行为。浏览器无法理解的CSS值被丢弃,这解释了为什么-我的自定义属性无法通过.style访问 在过去,您必须依靠JavaScript存储数据并自己处理
但这些不适用于自定义属性。是否支持此功能?将未识别的CSS属性放在
style
属性或style.cssText
属性中时将被忽略
如果要在特定元素上定义属性,我建议:HTML:
你不能使用数据-*属性(html5)?
这至少是有效的,不是一个奇怪的黑客行为。浏览器无法理解的CSS值被丢弃,这解释了为什么
-我的自定义属性
无法通过.style
访问
在过去,您必须依靠JavaScript存储数据并自己处理继承
然而,“自定义属性”,也就是“CSS变量”,已经被引入到标准中,并通过浏览器实现。乍一看,Edge似乎是最后一款主流浏览器,2017年10月16日推出了16版
本质上,您需要在元素上设置一个自定义属性(例如,--my custom property:'foobar';
),并且可以使用类似于getComputedStyle(your_el).getPropertyValue(“--my custom property”)
的东西来访问它,它将返回'foobar'
(带前导空格)。注意前导空格和引号。它将返回与提供的值完全相同的值
例如:
console.log(getComputedStyle(document.getElementById(“a”)).getPropertyValue(“--my-custom-property-1”))
console.log(getComputedStyle(document.getElementById(“b”)).getPropertyValue(“--my-custom-property-2”))
#b-div{--my-custom-property-2:'world'}
“你好”
#b“world”函数getCustomCssProperty(elementID,propertyName){
var style=document.getElementById(elementID).getAttribute(“样式”);
var entries=style.split(“;”);
对于(var i=0;i而言,现在所有浏览器都可以通过CSS
content
标记使用专门的CSS hack。本文介绍了如何做到这一点:
CSS:
:根目录{
--自定义属性:#000000;
}
Javascript:
var custom_property=window.getComputedStyle(document.body).getPropertyValue('--custom property').trim()
您可以使用API执行以下操作:
element.style.setProperty('color', 'black')
你用的是什么框架?我现在猜Prototype.js。如果是的话,把它标记为Prototype.js。为了回答你的问题,不存在的CSS属性无法获得,因为它们被忽略了。不,我用的是Prototype。但是我很高兴看到一个jQuery解决方案,如果只是给我一些想法的话。a@RobW说,我很确定浏览器忽略了CSS属性你不明白。这让我想知道,什么应用程序会这样做?如果你只想为你的脚本存储自定义数据,请使用自定义属性(前缀为“data-”),而不是自定义样式属性。例如,
。另外,试着解析element.outerHTML(不确定这是否兼容)。自定义属性(data-*)很好,但不要层叠,这是重点。请参阅。这很好,但如果样式属性的引号中包含分号(例如作为url的一部分),则很容易出错。这不会提供类似于整个要点的层叠。最好是“借用”一个有效的CSS属性,它可以接受任何值并具有可继承的行为。“最好“借用”一个有效的CSS属性,它可以接受任何值并具有可继承的行为”-例如“内容”就可以了。它不应用任何样式,它级联并接受任何值。如果您想允许通过样式表修改自定义元素,这将非常有用。getComputedStyle(您的元素)[“defined property”]
如果您想获得CSS定义的样式,例如“颜色”和“字体”,那么它可以很好地工作。但是,很高兴知道可以使用以下方法访问自定义属性:getComputedStyle(your_el).getPropertyValue(“--my custom property”)
很有趣,但由于这是一种(对某些人来说很复杂的)黑客行为,而且不符合规范,我仍然相信“正确”答案是不要在自定义属性中使用CSS,而是使用data属性。不过提示是+1-学习新的hack总是很好的!:)太棒了。我不知道通过JS访问这些文件的window.getComputedStyle方法!!感谢Milla!这似乎是正确的答案,因为大多数替代方法都需要更改文档(不仅仅是CSS)。但是,值得一提的是,(a)自定义属性名称必须以连字符开头;以及(b)这些值是继承的,这就是为什么您的示例可以从主体中获取根属性。
document.getElementById('myDiv').style.getPropertyValue("color")
document.getElementById('myDiv').style.color
<div id="myDiv" style="color:#f00;" data-custom-property="upsidedown" />
//jQuery's method to retrieve value:
$("#myDiv").data("custom-property");
//jQuery, without parsing:
$("#myDiv").attr("data-custom-property");
// Modern browsers, native JS:
document.getElementById("myDiv").dataset["custom-property"];
// Older browsers, native JS:
document.getElementById("myDiv").getAttribute("data-custom-property");
function getCustomCssProperty(elementID, propertyName){
var style = document.getElementById(elementID).getAttribute("style");
var entries = style.split(";");
for (var i=0; i<entries.length; i++){
var entry = entries[i].split(":");
if(entry[0] == propertyName){
return entry[1];
}
}
return null;
}
element.style.setProperty('color', 'black')