获取/迭代不在对象中的属性

时间:2013-07-16 13:51:20

标签: jquery css object for-loop styles

根据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);
    }
}

1 个答案:

答案 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];
        }
    }
}