我使用 这个剧本来创建一个所有继承样式等的样式对象。
var style = css($(this)); alert (style.width); alert (style.text-align);
接下来,第一个警报可以正常工作,但是第二个不行... ... 我猜它把 -解释为负值。调试器说“未捕获的引用错误”。但是我不能在它周围加引号,因为它不是字符串。那么如何使用这个 object 属性呢?
-
使用括号:
var notTheFlippingStyleObject = { 'a-b': 1 }; console.log(notTheFlippingStyleObject["a-b"] === 1); // true
关于对象的更多信息: MDN
注意: 如果要访问 风格对象 CSSStyleDeclaration,则必须使用 camelCase 从 JavaScript 访问它。更多信息是 给你。
看看评论。您将看到,对于 CSS 属性,键符号与许多属性不兼容。因此,使用驼峰大小写键表示法是当前的方法:
obj.style-attr // would become obj["styleAttr"]
使用键符号而不是点符号
style["text-align"]
JavaScript 中的所有数组都是对象,所有对象都是关联数组。这意味着您可以像引用数组中的键一样引用对象中的位置。
arr[0]
或者物体
obj["method"] == obj.method
以这种方式访问属性时要记住以下几点:
它们被计算,所以使用字符串,除非您使用计数器或动态方法名。
这意味着 obj [ method ]会给你一个未定义的错误,而 obj [“ method”]不会
如果使用 JavaScript 变量中不允许的字符,则必须使用此表示法。
这个正则表达式可以概括如下:
[a-zA-Z_$][0-9a-zA-Z_$]*
直接回答这个问题: style['text-align']是如何引用带连字符的属性。但是在这种情况下应该使用 style.textAlign(或 style['textAlign'])。
style['text-align']
style.textAlign
style['textAlign']
具有 -的 CSS 属性在 JavaScript 对象的 camelCase 中表示,这将是:
alert( style.textAlign );
您还可以使用括号符号来使用字符串:
alert( style['text-align'] );
属性名可能只包含字符、数字、众所周知的 $符号和 _(多亏了 pinvdb)。
$
_
对象属性名称与 CSS 名称不是一对一的匹配。
连字符样式属性是 在 JavaScript 中通过 camelCase 引用,因此使用 style.textAlign。
原始问题的答案是: 将属性名放在引号中,并使用数组样式索引:
obj['property-with-hyphens'];
有几个人指出,您感兴趣的属性是一个 CSS 属性。带有连字符的 CSS 属性将自动转换为驼峰大小写。在这种情况下,必须使用骆驼大小写的名称,如:
style.textAlign;
但是,此解决方案只适用于 CSS 属性,
obj['a-b'] = 2; alert(obj.aB); // undefined alert(obj['a-b']); // 2
为了解决您的问题 : 带有连字符的 CSS 属性是 由 camelCase 中的 JavaScript 属性表示,以避免这个问题。
要回答问题 : 使用 方括号表示法方括号表示法: obj.prop与 obj["prop"]相同,因此可以使用字符串访问属性名,并使用标识符中禁用的字符。
obj.prop
obj["prop"]
alert(style.textAlign)
或者
alert(style["textAlign"]);
我认为在 CSS 样式的情况下,它们在 JavaScript 中被改为 camelCase,所以 test-align变成了 textAlign。
test-align
textAlign
在一般情况下,如果要访问包含非标准字符的属性,可以使用数组样式: ['text-align']
['text-align']
起初,我想知道为什么这个解决方案在我这边不起作用:
api['data-sitekey'] // Returns undefined
后来我发现访问数据属性是不同的:
应该是这样的:
var api = document.getElementById("some-api"); api.dataset.sitekey