为什么可以';我用这个函数通过javascript设置z索引吗?(我知道camelcase)

为什么可以';我用这个函数通过javascript设置z索引吗?(我知道camelcase),javascript,css,z-index,Javascript,Css,Z Index,您好,我想更改DOM元素的z-index,所以我使用了一个函数来实现。该函数适用于许多属性,但不适用于z-index我正在使用开发工具,我可以看到它甚至没有在元素上设置,我不知道为什么 Javascript: function setStyle(obj, propertyObj) { for (var property in obj) { if(obj.hasOwnProperty(property)){ obj.

您好,我想更改DOM元素的
z-index
,所以我使用了一个函数来实现。该函数适用于许多属性,但不适用于
z-index
我正在使用开发工具,我可以看到它甚至没有在元素上设置,我不知道为什么

Javascript:

    function setStyle(obj, propertyObj) {
        for (var property in obj) {
             if(obj.hasOwnProperty(property)){
                obj.style[property] = propertyObj[property];
            }
        }
    }
    var img = new Image();
    img.onload = function() {
       setStyle(this, {'zIndex':'-5'}) ;
    };
    img.src = 'test.jpg'
编辑

谢谢你的回答


我在CSS代码的某个地方应用了一个
边框
,因此当我在对象中循环时,属性
边框
被更改了(但对于
z-index
),情况并非如此。

使用JS设置z-index非常简单:

document.getElementById('IDHERE').style.zIndex = "2000";
您有两个错误:

您的
for in-loop
正在图像对象中循环,而不是在属性对象中循环

您的
hasOwnProperty
检查错误(而且没有必要)。您要检查的是obj是否有样式道具,而不是样式对象是否有样式道具

应改为:

function setStyle(obj, propertyObj) {
    for (var property in propertyObj) {
        obj.style[property] = propertyObj[property];
    }
}

不妨再加上一个答案

typeof obj.style === 'object' && Object.keys(propertyObj).forEach(function(key) {
    obj.style[key] = propertyObj[key];
});
IMO,在…方面优于
。。。在
循环中,因为它不受对象原型注入问题的影响

这也确保了
obj
有一个
style
属性作为开头

更新 因为有些人热衷于微优化,所以这里没有
数组。forEach

if (typeof obj.style === 'object') {
    var keys = Object.keys(propertyObj);
    for (var i = 0, l = keys.length; i < l; i++) {
        var key = keys[i];
        obj.style[key] = propertyObj[key];
    }
}
if(对象类型=='object'){
var keys=Object.keys(propertyObj);
对于(变量i=0,l=keys.length;i
嗯,因为您运行的代码都错了。马上看答案我真的等不及了。我想你可以花点时间研究什么是“自有财产”。你确定边界没有被css样式应用到某个地方吗?我正在使用你的答案,祝贺你。我真的很喜欢@Phil使用
Object.keys的方法。它比我这里需要的更彻底(如果有这样的事情?)需要
for(propertyObj中的var属性)
这不就是检查
Obj
是否有样式吗?正如我所提到的,这适用于某些样式,但不适用于
z-index
。不,这是检查obj.style是否已经有一个zIndex集,我认为这是基于代码您想要的。如果你不在乎它是否已经设置好了,你可以去掉obj.style.hasOwnProperty(property),这就是为什么我从发布的版本中删除了它。我看不出这有什么变化(除了不再检查
hasOwnProperty
?@Startec这会在
propertyObj
上循环,而不是
obj
嗯,我会对实际的属性对象进行排序。你是按照你写的方式对
进行排序的。这也是为什么我会更改你的参数名称,以便更好地理解。我在手机上,所以如果有任何拼写错误都是我的错。你应该阅读代码,看看你和我的代码有什么不同。此外,你不需要检查hasOwnProperty的样式。如果它不是一个可接受的样式,它无论如何也不会添加它。为我辩护(如果这是一个),我从其他地方复制了代码,所以(站不住脚)。谢谢你。这没关系。这是其中一些问题的答案,我会在有时间使用电脑时更新哈。因此,为了将来的参考,它会帮助其他人。对不起,我无意失礼。这是我打电话的方式哈威尔说的这个嗯。我似乎在读一些相互矛盾的东西。
hasOwnProperty
是否需要检查sary?
hasOwnProperty
在使用
for
循环时是必要的。不,
style
将忽略它不使用的任何道具。我真的很喜欢这个答案。感谢您解释为什么选择使用
对象。键
一个问题,从我阅读的内容来看,
对象
原型注入似乎不是一个is用
style
属性起诉。你能证实这一点吗?还有,为什么要检查
obj.style
呢?这只是为了确保
obj
有那种风格?一点也不优越,实际上慢了95%…我的坏消息至少是forEachjs@Startec只有在使用
for…in
循环迭代对象属性时才会出现问题。可能发生的情况是,一段单独的代码可能会添加到
对象
原型中。然后,突然之间,所有对象都有您可能不期望的额外属性。@EasyBB我只说了
对象。键
优于
for…in
循环,而不是因为它是faster@EasyBB这是香草JS,我理解
Array.forEach
for
循环慢,但我喜欢可读性。再说一次,我从没说过这更快
typeof obj.style === 'object' && Object.keys(propertyObj).forEach(function(key) {
    obj.style[key] = propertyObj[key];
});
if (typeof obj.style === 'object') {
    var keys = Object.keys(propertyObj);
    for (var i = 0, l = keys.length; i < l; i++) {
        var key = keys[i];
        obj.style[key] = propertyObj[key];
    }
}