根据这个问题,我需要检查属性是否不在对象中:
所以,我们有一些造型:
.foo {
top: 13px;
width: 37px;
}
还有一个像这样的物体:
var keyframe = {
0: {
top: 0
},
1000: {
top: 100
},
2000: {
width: 100
}
};
现在,我需要迭代所有不在下一个/上一个框架-项中的属性,用jQuery对象中的css值填充缺失的属性。
最后一个对象看起来是这样的:
var keyframe = {
0: {
top: 0,
width: '37px'
},
1000: {
top: 100,
width: '37px'
},
2000: {
top: 100,
width: 100
}
};
我试过这样的东西:
http://fiddle.jshell.net/WdNge/
var $foo = $('.foo');
for (var key in keyframe) {
var obj = keyframe[key];
for(var ok in obj) {
if (!(ok in obj)) obj[ok] = $foo.css(ok);
}
}
但是看来
if (!(ok in obj)) // is always `truthy`
但是,如果我直接申报
if (!('top' in obj)) // it works...
有什么想法吗?
更新
我甚至尝试过这样的东西,但没有成功:
http://fiddle.jshell.net/WdNge/1/
var $foo = $('.foo');
var keys = [];
for (var key in keyframe) {
var obj = keyframe[key];
var k = Object.keys(obj);
keys.push(k[0]);
for(var i = 0; i < keys.length; i++) {
var ok = keys[i];
if (!(ok in obj)) obj[ok] = $foo.css(ok);
}
}
AFAIK您不能使用jQuery/Javascript从类中提取指定的CSS属性。
这意味着您必须a)将.foo
类规范作为JSON单独存储在Javascript中,或者b)迭代jQuery知道的所有CSS属性。
CSS
.foo {
top: 0;
width: 100px;
}
Javascript
var foo_styles = { top: 0, width: "100px" },
keyframe = {
0: {
top: 0
},
1000: {
top: 100
},
2000: {
width: 100
}
};
for (var key in keyframe) {
var frame = keyframe[key];
for(var frameProperty in foo_styles) {
if (!(frameProperty in frame)) {
frame[frameProperty] = foo_styles[frameProperty];
} else {
// Update with last value from keyframe
foo_styles[frameProperty] = frame[frameProperty];
}
}
}