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



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

所以,我们有一些造型:

.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];
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新