美文网首页Web前端之路
获取不到DOM的backgroundColor属性?

获取不到DOM的backgroundColor属性?

作者: 竿牍 | 来源:发表于2019-07-26 09:24 被阅读0次

问题描述,最近一个防重复点击的功能,用指令实现的,为了让点击时,按钮变灰,过几秒后又变回原来的颜色,所以先用变量保存之前的背景色值。问题是:document.getElementById("button”).style.backgroundColor,这样竟然取不到背景色?

找到了答案是:

document.getElementById("").style获取的是元素行间设置的样式,不能获取到css中设置的样式。如果要获取css中设置的样式,可以试试getComputedStyle(标准浏览器)或者currentStyle(ie低版本)

没怎么看懂,看到了关键字getComputedStyle

getComputedStyle 为何物呢?DOM 中 getComputedStyle 方法可用来获取元素中所有可用的css属性列表,以数组形式返回,并且是只读的。IE6.7.8 中则用 currentStyle 代替 。

// 语法:
// 在旧版本之前,第二个参数“伪类”是必需的,现代浏览器已经不是必需参数了
// 如果不是伪类,设置为null,
window.getComputedStyle("元素", "伪类");

尝试一下之后可以看到,window.getComputedStyle 获取的是所有的样式,如果我们只是要获取单一样式,该怎么做呢。这个时候就要介绍另一个方法 -- getPropertyValue 。

用法也很简单:

// 语法:
// 使用 getPropertyValue 来指定获取的属性
window.getComputedStyle("元素", "伪类").getPropertyValue(style);

到这里,相信大家都知道怎么解决这个问题了,下面附上我用指令实现的防重复点击的功能代码

vue.js定义指令:

Vue.directive('preventReClick', {
  inserted (el, binding) {
    el.addEventListener('click', () => {
      if (!el.disabled) {
        el.disabled = true
        let bgColor = window.getComputedStyle(el, null).backgroundColor
        el.style.backgroundColor = '#ccc'
        setTimeout(() => {
          el.disabled = false
          el.style.backgroundColor = bgColor
        }, binding.value || 2000)
      }
    })
  }
})

html

<a href="javascript:;" v-preventReClick @click.prevent="pay($event)">立即购买</a>

javascript

methods: {
  pay (event) {
      if (event.target.disabled) {
        return
      }
      // TODO
  }
}

相关文章

  • 获取不到DOM的backgroundColor属性?

    问题描述,最近一个防重复点击的功能,用指令实现的,为了让点击时,按钮变灰,过几秒后又变回原来的颜色,所以先用变量保...

  • 原生JS中DOM元素的操作

    获取dom 修改属性 .获取对象的属性 .js获取非行内样式属性 innerHTML dom 属性设置与获取 Do...

  • js获取Dom对象

    通过id获取Dom 通过class获取dom 通过标签获取dom 通过name属性获取dom 通过选择器query...

  • js 操作DOM

    获取dom的三种方式 dom常用属性 ( element .属性) 元素类型 名称描述nodeName获取标签类型...

  • React获取DOM

    React获取DOM的方法简述 createRef 当 ref 属性在组件时,获取组件实例;当ref属性在dom时...

  • 简单-项目开发步骤之代码规范

    1.建议用.符号代替括号用于设置或获取属性值 For example: view.backgroundColor ...

  • RN:七七八八

    组件backgroundColor属性为空,会向父组件获取对应属性值在RCTUIManager中有一个方法:_am...

  • js day17

    一、访问元素的属性 A.核心Dom B.HTML Dom C.自定义属性: 案例 div属性 script 获取a...

  • JS事件

    DOM DOM查询 通过domcument对象获取元素节点:getElementById("id"):通过id属性...

  • DOM

    一、对象基础(补充) 二、DOM获取节点 三、间接获取节点 四、DOM节点的添加和删除 五、DOM属性操作 六、练...

网友评论

    本文标题:获取不到DOM的backgroundColor属性?

    本文链接:https://www.haomeiwen.com/subject/koglrctx.html