我如何引用一个JavaScript对象属性连字符?
使用此脚本来创build所有inheritance的样式的样式对象。
var style = css($(this)); alert (style.width); alert (style.text-align);
与以下,第一个警报将正常工作,但第二个不..它正在解释-
作为一个减号,我认为…debugging器说'未捕获的参考错误'。 不过,我不能把它引起来,因为它不是一个string。 那么如何使用这个对象属性呢?
编辑
看看你会看到的CSS的注释符号与许多属性不兼容。 因此,使用骆驼案件的键符号是目前的方式
obj.style-attr // would become obj["styleAttr"]
使用键符号而不是点
style["text-align"]
js中的所有数组都是对象,所有对象只是关联数组,这意味着您可以像引用数组中的键一样引用对象中的某个位置。
arr[0]
或对象
obj["method"] == obj.method
这样访问属性时要记住几件事情
-
他们被评估,所以使用string,除非你正在做计数器或使用dynamic方法名称的东西。
这意味着obj [方法]会给你一个未定义的错误,而OBJ [“方法”]不会
-
如果您使用jsvariables中不允许的字符,则必须使用此表示法。
这个正则expression式几乎总结了它
[a-zA-Z_$][0-9a-zA-Z_$]*
带有-
CSS属性在Javascript对象的camelCase中表示。 那将是:
alert( style.textAlign );
您也可以使用括号表示法来使用string:
alert( style['text-align'] );
属性名称只能包含字符,数字,众所周知的$
符号和_
(感谢pimvdb)。
原始问题的答案是:将属性名称放在引号中,并使用数组样式索引:
obj['property-with-hyphens'];
有几位指出,你感兴趣的财产是一个CSS属性。 具有连字符的CSS属性会自动转换为骆驼套pipe。 在这种情况下,您可以使用骆驼名称,如:
style.textAlign;
但是,这个解决scheme只适用于CSS属性。 例如,
obj['a-b'] = 2; alert(obj.aB); // undefined alert(obj['a-b']); // 2
使用括号:
var notTheFlippingStyleObject = { 'a-b': 1 }; console.log(notTheFlippingStyleObject["ab"] === 1); // true
更多关于对象的信息: MDN
注意:如果您正在访问样式对象CSSStyleDeclaration ,则必须使用camelCase从javascript访问它。 更多信息在这里
通过在JavaScript中使用camelCase引用带连字符的样式属性,所以使用style.textAlign
。
为了解决你的问题 :在其中使用连字符的CSS属性由camelCase中的JavaScript属性表示,以避免此问题。 你想要: style.textAlign
。
回答这个问题 :使用方括号表示法 : obj.prop
与obj["prop"]
相同,因此您可以使用string访问属性名称,并使用标识符中禁用的字符。
alert(style.textAlign)
要么
alert(style["textAlign"]);
对象属性名称不是一对一匹配的CSS名称。
我认为,在CSS样式的情况下,他们被改为在Javascript中的驼峰,所以test-align
成为textAlign
。 在一般情况下,你想访问一个包含非标准字符的属性,你可以使用数组样式。 ['text-align']
直接回答这个问题: style['text-align']
是你如何引用一个连字符的属性。 但是style.textAlign
(或者style['textAlign']
)是这种情况下应该使用的。
起初,我想知道为什么解决scheme不能在我的最终结果
api['data-sitekey'] //returns undefined
…后来发现访问数据属性是不一样的:应该是这样的:
var api = document.getElementById("some-api"); api.dataset.sitekey
希望这可以帮助!