2

根据这个问题,我需要检查属性是否不在对象中:

所以,我们有一些样式:

.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);
    }
}
4

1 回答 1

0

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];
        }
    }
}
于 2013-07-16T14:09:43.017 回答