关于CSS中对象属性无法在JS中用style获取的问题

先来看一段demo

    <style>
        div{
            position:absolute;
            left: 10px;
            background: red;
            width: 100px;
            height: 100px;
        }
    </style>
    <script>
        window.onload = function () {
            var oDiv = document.getElementsByTagName("div")[0];
            alert(oDiv.style.left);  
        }
    </script>
    <body>
         <div></div>
    </body>

 FF下的显示效果

会发现 明明在css样式中设置了left属性 但是获取到的值为空

解决方案:

①将css的left属性改到行间样式中,即HTML内

    <body>
         <div style="left:10px"></div>
    </body>

 会发现是可以直接获取到left属性的值的

②可以使用currentStyle(IE Opera) getComputedStyle(FF Chrome)来获取到我们想要的属性值

    <script>
        window.onload = function () {
            var oDiv = document.getElementsByTagName("div")[0];
            alert(getStyle(oDiv,'left'));
        };
        function getStyle(obj,attr) {
            if(typeof getComputedStyle)
                return getComputedStyle(obj,null)[attr];
            else return obj.currentStyle[attr];
        }
    </script>

 

最后来说一下问题的原因所在:

obj.style获取的是DOM元素CSS样式的声明对象简值。obj.style可读可写,所以我们会发现这样一个问题,当我们在JS代码中没有写obj.style之前去读obj.style也就是上面所发生的情况,会弹出一个空值,style只能获取到内联样式的具体值,而内部和外部样式无法获取到具体值。所以如果要获取CSS对象属性值,请使用currentStyle和getComputedStyle,但是currentStyle和getComputedStyle是只读的,所以修改CSS样式还是要用style来修改。

转载于:https://www.cnblogs.com/JDDDD/p/5390883.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值