根据this question,我需要知道一个属性不在一个对象中:
所以,我们有一些造型:
.foo {
top: 13px;
width: 37px;
}
......以及像这样的对象:
var keyframe = {
0: {
top: 0
},
1000: {
top: 100
},
2000: {
width: 100
}
};
现在我需要迭代不在下一个/前一个 frame -item中的所有属性,用jQuery-object中的css-values填充缺少的属性。
这样最终的对象看起来像这样:
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);
}
}
答案 0 :(得分:0)
AFAIK您无法使用jQuery / Javascript从类中提取指定的CSS属性。
这意味着你必须a)在你的Javascript中将.foo
类规范单独存储为JSON,或者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];
}
}
}