js获取元素样式ele.style.attribute只能获取内敛样式的属性值!内部样式的属性值获取不了!怎么解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js获取元素样式ele.style.attribute只能获取内敛样式的属性值!内部样式的属性值获取不了!怎么解决?相关的知识,希望对你有一定的参考价值。

<html>
<body>
<div style='border:1px solid #ccc;display:block;'></div>
<script>alert(document.getElementsByTagName('div')[0].style.display);</script> #这样能够获取div的指定样式属性值。但是如果将div的样式写在内部样式里<style type='text/css'>div.......</style>,js就不能获取元素的样式属性值了!(虽然能够通过getComputedStyle获取,但是在涉及长宽的时候,他返回的总是一个总计的值,十分不好,且不能修改),怎么解决?同样的问题还出现在ele.style.cssText 中,拜托各位大神速度解决,谢谢了!
</body>
</html>

HTMLElement.prototype.__defineGetter__("currentStyle", function ()  
    return this.ownerDocument.defaultView.getComputedStyle(this, null); 
);
获取样式的时候吧style改为currentStyle
比如element.style.width改为element.currentStyle.width

追问

能否将你的代码解释一下?第一行代码看不懂。我只知道是定义HTMLElement类的一个不知道方法还是属性,然后就可以直接调用此方法了。个人觉得这个方法很强大,是接近底层的操作,就如同授人以鱼不如授人以渔中的渔,吸收了这个,以后就可以直接在不加载任何东西的情况下使用了,虽然效果不是最佳,但非常值得学习,大神,麻烦详尽解释下

追答其实这个方法很简答,只是是写原型上的。
具体的实现还是下面的
return this.ownerDocument.defaultView.getComputedStyle(this, null); 
如果不懂的话,百度js原型
HTMLElement指的是html对象
prototype对象类型原型的引用
__defineGetter__定义一个获取的方法

参考技术A   给你一段代码:
  <html>
  <head>
  <title>JQuery中如何获取样式属性的值</title>
  <script type="text/javascript" src="jquery.js"></script>
  <style>
  .top
  background: url(Tupian.jpg) no-repeat;
  width: 75px;
  height: 90px;
  
  </style>
  <script type="text/javascript">
  $(function ()
  var url = $("div.top").css("background-image");
  alert(url);
  )
  </script>
  </head>
  <body>
  <div class="top"></div>
  </body>
  </html>追问

是使用纯粹的javascript,不加载jquery库。如何做到?

获取元素样式并将其分配给 vue.js 中的另一个元素

【中文标题】获取元素样式并将其分配给 vue.js 中的另一个元素【英文标题】:get element style and assign it to another element in vue.js 【发布时间】:2018-01-05 23:54:53 【问题描述】:

我正在使用 VUE.js 2

这是我的 DOM:

<aside :style="height : height()" class="col-sm-4 col-md-3 col-lg-3">...</aside>

<main class="col-sm-8 col-md-9 col-lg-9" ref="userPanelMainContents">...</main>

这是我的脚本:

export default 
    data() 
        return 
    ,
    methods: 
        height () 
            return this.$refs.userPanelMainContents ? this.$refs.userPanelMainContents.offsetHeight + 'px' : '0px'
        
    

我想获取 userPanelMainContents 高度并将其分配给旁边的标签。 我该怎么做?!!!

【问题讨论】:

【参考方案1】:

尝试返回一个数据属性而不是使用返回高度的方法,然后你可以使用mounted函数设置高度。

像这样:

<aside :style=" height: height " class="col-sm-4 col-md-3 col-lg-3">...</aside>

<main class="col-sm-8 col-md-9 col-lg-9" ref="userPanelMainContents">...</main>


export default 
    data() 
        return 
            height: '0px'
        
    ,
    mounted () 
        this.height = this.$refs.userPanelMainContents[0].style.height;
    

已编辑:将计算属性更改为数据属性,并在调用挂载事件时设置它。

它将使用不同的语法,因为我不能在 codepen 上使用 .vue 文件,但这里是工作代码。

https://codepen.io/michael_coder/pen/qXbxXW

【讨论】:

渲染函数中的错误:“TypeError:无法读取未定义的属性'userPanelMainContents'” 我会为你编辑和修复它。我认为正在发生的事情是在计算之后创建了参考。 我使用 *.vue 文件和 webpack。这种结构有可能造成这种情况吗? 全部编译到 es2015。这不应该导致问题。我一直在使用 *.vue 和 webpack。 不幸的是没有字!!

以上是关于js获取元素样式ele.style.attribute只能获取内敛样式的属性值!内部样式的属性值获取不了!怎么解决?的主要内容,如果未能解决你的问题,请参考以下文章

通过js读取元素的样式

JS获取元素计算过后的样式

js中获取元素的样式兼容性的写法

js获取元素的外链样式

Next.js:如何从元素中获取应用样式?

原生js获取元素的样式style属性值