返回顶部
首页 > 资讯 > 前端开发 > VUE >JavaScript怎么获取元素最终background-color
  • 912
分享到

JavaScript怎么获取元素最终background-color

2024-04-02 19:04:59 912人浏览 安东尼
摘要

这篇文章主要为大家展示了“javascript怎么获取元素最终background-color”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript

这篇文章主要为大家展示了“javascript怎么获取元素最终background-color”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript怎么获取元素最终background-color”这篇文章吧。

一、题目

  用js代码求出页面上一个元素的最终的background-color,不考虑IE浏览器,不考虑元素float情况。

二、题目解析

  1.考察底层JavaScript基础

  前端开发,日常最常接触的就是页面样式的编写。而摆脱Jquery工具库,用原生js获取样式,是每个前端程序猿进阶阶段必须掌握的技能。

  2.考察面试者的思维缜密程度和开发经验

  如果认为单单求元素计算后的样式,就有点too young了。页面的样式的复杂,永远是最虐心的。就算前端有多牛逼,一听到兼容IE6,论谁都会心塞?。所以还要考虑特殊的情况:display,opacity,visibility的取值。

三、理论基础

  1. 内联样式

  内联样式可以通过元素的style属性获取,如果style属性有background-color值,则可以直接获取出来 (暂不考虑!important) 。

  2. 外联的层叠样式

  DOM2样式规范在document.defaultView中包含了一个getComputedStyle()方法。该方法返回一个只读的CSSStyleDeclaration对象,其中包含特定元素的所有计算样式。

四、解题

4.1 将所有工具方法封装在WDS(wall dom script)命名空间中

(function(WDS, undefined){
 // 封装代码...
})(window.WDS || (window.WDS = {}));

代码封装在命名空间里,不会造成无意间的代码污染。

4.2 工具方法camelize

// 字符串转换为驼峰写法
function camelize(str) {
 return str.replace(/-(\w)/g, function (strMatch, p1){
  return p1.toUpperCase();
 });
}

该方法是为了方便后续getStyle()方法的编写,而独立出来的。

作用是将连字符类的css属性值,转换成驼峰写法。

例如:将background-color转换为backgroundColor

4.3 获取特定元素的计算样式

// 获取元素计算后的样式
function getStyle(elem, property){
 if(!elem || !property){
  return false;
 }
 var value = elem.style[camelize(property)], // 先获取是否有内联样式
  css; // 获取的所有计算样式
 // 无内联样式,则获取层叠样式表计算后的样式
 if(!value){
  if(document.defaultView && document.defaultView.getComputedStyle){
   css = document.defaultView.getComputedStyle(elem, null);
   value = css ? css.getPropertyValue(property) : null;
  }
 }
 return value;
}

做到这一步,第一个考察点基本就满足了。也能获知面试者是否具备足够扎实的js基础。

另外,像安全保护性的判断if(!elem || !property)和功能嗅探if(document.defaultView && document.defaultView.getComputedStyle),都能很好地体现开发者的代码逻辑和开发经验。

4.4 排除特殊情况

// 检测获取的背景色是否有效
function checkBgValue(elem){
 var value = getStyle(elem, 'background-color'),
  hasColor = value ? true : false; // 是否有颜色
 // 排除特殊情况
 if(value == "transparent" || value == "rgba(0, 0, 0, 0)"){
  // 未设置background-color,或者设置为跟随父节点
  hasColor = false;
 }else if(getStyle(elem, 'opacity') == "0"){
  // dom节点透明度为全透明
  hasColor = false;
 }else if(getStyle(elem, 'visibility') == "hidden"){
  // dom节点不可见
  hasColor = false;
 }else if(getStyle(elem, 'display') == "none"){
  // dom节点不可见
  hasColor = false;
 }
 return hasColor;
}

4.5 获取div在页面最终显示的颜色

// 获取div最终显示的颜色
function getRealBg(elem){
 if(checkBgValue(elem)){
  return getStyle(elem, 'background-color');
 }else if(elem != document.documentElement){
  return getRealBg(elem.parentnode);
 }
 return '';
}

  获取样式值采用递归方式处理。

  如果能顺利获取到元素样式,且不触发4.4 排除特殊情况中的一种,则直接返回结果。

  触发了特殊情况,则需要查找父节点以及更上层的节点的样式,来获取肉眼能看到,显示在页面上的background-color值。

  在向上回溯的过程中,如果已经回溯到html根节点,则可以停止回溯。所以加了判断else if(elem != document.documentElement)

五、遗漏的大boss

5.1 大boss !important

  如果乱用 !important,对大型项目的维护和开发,绝对是一场噩梦。因为优先级规则的计算,!important永远处在食物链的最顶层。

  当前题目不考虑这种情况,也是我的偷懒?。确实很棘手,就不写这个逻辑分支的代码了。这里提醒一下~

5.2 大boss 父节点及根节点设置了不可见css属性

  只要设置该css语句:html {display:none;},页面所有元素立刻消失不见。而任意特定元素的上级节点,只要设置了 opacity,display,visibility,判断逻辑瞬间变得复杂起来。所以,这个浑水我也不趟 O(∩_∩)O哈哈~

六、改进的点

  其实特殊情况排除的判断,我偷懒没做到最好——rgb颜色值和特定颜色值(比如red)没有进行统一的转换,只是加了生硬的判断if(value == "transparent" || value == "rgba(0, 0, 0, 0)")。

有兴趣的可以搜索下颜色值转换的js方法,这里我就不写了。

以上是“JavaScript怎么获取元素最终background-color”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网VUE频道!

--结束END--

本文标题: JavaScript怎么获取元素最终background-color

本文链接: https://lsjlt.com/news/67750.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript怎么获取元素最终background-color
    这篇文章主要为大家展示了“JavaScript怎么获取元素最终background-color”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript...
    99+
    2024-04-02
  • JavaScript怎么获取HTML元素
    这篇文章主要讲解了“JavaScript怎么获取HTML元素”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript怎么获取HTML元素”吧! ...
    99+
    2024-04-02
  • javascript中怎么获取dom元素
    这篇文章给大家分享的是有关javascript中怎么获取dom元素的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 获取方法:1、“document.g...
    99+
    2024-04-02
  • JavaScript中怎么获取元素属性
    今天就跟大家聊聊有关JavaScript中怎么获取元素属性,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先我们需要把它们归类下:innerHTML...
    99+
    2024-04-02
  • css怎么使用background-color属性为元素设置背景色
    小编给大家分享一下css怎么使用background-color属性为元素设置背景色,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧...
    99+
    2024-04-02
  • 怎么在JavaScript中获取表单元素
    这篇文章主要介绍了怎么在JavaScript中获取表单元素,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。HTML中的表单:<!DOCTYPE html>...
    99+
    2023-06-14
  • JavaScript如何获取DOM元素
    小编给大家分享一下JavaScript如何获取DOM元素,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!方法:1、用getElementById方法通过ID获取;2...
    99+
    2023-06-14
  • vuejs怎么获取元素
    这篇文章主要讲解了“vuejs怎么获取元素”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vuejs怎么获取元素”吧!vuejs获取元素的方法:1、打开相应的代码文件;2、给元素绑定“ref=...
    99+
    2023-06-25
  • python怎么获取元祖元素
    要获取元组中的元素,可以使用索引来访问元祖元素。元组中的元素是有序的,从0开始索引。 以下是一些常见的方法来获取元组元素: 使用...
    99+
    2023-10-28
    python
  • php怎么获取数组最后一个元素
    在PHP中,可以使用end()函数来获取一个数组的最后一个元素。示例如下:php$array = [1, 2, 3, 4, 5];$...
    99+
    2023-10-18
    php
  • JavaScript如何获取元素样式
    这篇文章主要为大家展示了“JavaScript如何获取元素样式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript如何获取元素样式”这篇文章吧。获取元素样式// 获取样式...
    99+
    2023-06-03
  • Javascript中怎么获取页面元素的位置
    这篇文章给大家介绍Javascript中怎么获取页面元素的位置,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、网页的大小和浏览器窗口的大小首先,要明确两个基本概念。一张网页的全部面积...
    99+
    2024-04-02
  • javascript怎样获取数组前几位元素
    今天给大家介绍一下javascript怎样获取数组前几位元素。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。javascrip...
    99+
    2024-04-02
  • JavaScript如何获取元素和节点
    本文小编为大家详细介绍“JavaScript如何获取元素和节点”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript如何获取元素和节点”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起...
    99+
    2024-04-02
  • 怎么在JavaScript中使用dom获取页面元素
    怎么在JavaScript中使用dom获取页面元素?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应...
    99+
    2023-06-14
  • JavaScript中获取数组最后一个元素方法汇总
    目录1. 数组 length 属性2. 数组 slice 方法3. 数组 pop 方法性能比较总结当需要从 JavaScript 中的数组中获取最后一个元素时,有多种选择,本文将提供...
    99+
    2023-02-06
    JavaScript获取数组最后一个元素 JavaScript获取数组最后一个元素方法 js 获取数组最后一个元素
  • java中document怎么获取元素
    在Java中,可以使用以下方式来获取元素:1. 根据元素的标签名获取元素:```javaElement element = docu...
    99+
    2023-10-11
    java
  • jquery怎么获取兄弟元素
    这篇文章主要介绍“jquery怎么获取兄弟元素”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“jquery怎么获取兄弟元素”文章能帮助大家解决问题。具体步骤如下:首先,新建一个html项目,并在项目中...
    99+
    2023-06-05
  • jquery如何获取最后一个元素
    使用jquery获取最后一个元素的方法:1.新建html项目,引入jquery;2.在项目中创建p标签;3.使用$(document).ready()方法加载function函数;4.使用last()方法获取最后一个元素;具体步骤如下:首先...
    99+
    2024-04-02
  • PHP 获取最后一个数组元素
    数组是任何编程语言的重要组成部分,因为它们包含通过索引访问的许多元素。在今天的文章中,我们将学习如何提取数组的最后一个元素。在 PHP 中使用 array_values() 提取最后一个数组元素它是一个内置...
    99+
    2024-02-27
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作