当前位置: 首页 > 面试题库 >

Javascript,CSS:按样式属性获取元素

申宜
2023-03-14
问题内容

我想:

  1. 查找页面中所有元素的样式属性(例如:具有的所有元素color:#333;
  2. 更改所有属性(例如从color:#333color:#444)。

您对此有何建议?


问题答案:

我的建议是尽可能避免这样做。而是使用类来分配颜色值,然后可以使用该类而不是颜色值来查找元素。

据我所知,没有可用于查询 特定
样式值的选择器(即使在CSS3中也是如此),这意味着循环遍历所有元素(或者看起来可以将其限制为具有style属性的所有元素)并看着element.style.color财产。现在,问题是,即使您`color:

51)甚至是rgba(51, 51, 51, 0)`。

因此,总的来说,这确实是一个非常尴尬的练习。

既然您说过这是针对Chrome扩展程序的,那么您可能不必担心多种格式,尽管我会随意介绍一下我们曾经在野外看到的格式,以防Chrome更改格式(也许与其他已知的浏览器保持一致)。

但例如:

(function() {

  // Get all elements that have a style attribute
  var elms = document.querySelectorAll("*[style]");

  // Loop through them
  Array.prototype.forEach.call(elms, function(elm) {
    // Get the color value
    var clr = elm.style.color || "";

    // Remove all whitespace, make it all lower case
    clr = clr.replace(/\s/g, "").toLowerCase();

    // Switch on the possible values we know of
    switch (clr) {
      case "#333":
      case "#333333":
      case "rgb(51,51,51)": // <=== This is the one Chrome seems to use
      case "rgba(51,51,51,0)":
        elm.style.color = "#444";
        break;
    }
  });
})();

活生生的例子用红为清楚起见 | 来源
-请注意,示例依赖于ES5功能querySelectorAll,但是由于这是Chrome,因此我知道它们已经存在。

请注意,以上内容假定是内联样式,因为您已讨论了该style属性。如果您指的是 计算 样式,那么它就无济于事,只能遍历该页面上的 所有
元素,调用getComputedStyle。除此之外,以上适用。

最后的注意:如果您确实要使用样式属性,而该属性仅包含值color: #333而不是value
color:#333color:#333333;or color: #333; font-weight: bold或任何其他字符串,则querySelectorAll可以处理:`querySelectorAll(‘*[style=”color:

333”]’)`。但这将是 非常 脆弱的。

从下面的评论看来,您必须遍历 每个 元素。如果是这样,我根本不会使用querySelectorAll,而是使用递归下降:

function walk(elm) {
    var node;

    // ...handle this element's `style` or `getComputedStyle`...

    // Handle child elements
    for (node = elm.firstChild; node; node = node.nextSibling) {
        if (node.nodeType === 1) { // 1 == Element
            walk(node);
        }
    }
}

// Kick it off starting with the `body` element
walk(document.body);

这样,您就不会建立大型的,不必要的临时结构。这可能是遍历文档的整个DOM的最有效方法。



 类似资料:
  • 问题内容: 如何通过jQuery从CSS类访问属性?我有一个CSS类,如: 我需要对一个对象进行彩色动画处理: 这样我就可以从CSS 更改为,并且动画将按照CSS进行工作。 一种方法是在类中放置一个不可见的元素,然后获取要在动画中使用的元素的颜色,但是我想这是非常非常糟糕的做法。 有什么建议么? 问题答案: 我编写了一个小函数,该函数遍历文档上的样式表以查找匹配的选择器,然后查找样式。 需要注意的

  • 问题内容: 我一直在使用Pro JavaScript Techniques的John Resig 函数来获取元素的样式: 是否可以仅获取样式表指定的元素样式(如果样式未定义,则返回null)? 更新: 为什么我需要这样的野兽?我正在构建一个允许用户设置元素样式的小组件。一个可应用的样式是- ,, -使用无样式元素默认。这使得无法确定元素是居中还是因为用户希望居中,还是因为这是默认样式而居中。 问题

  • 本文向大家介绍原生javascript获取元素样式,包括了原生javascript获取元素样式的使用技巧和注意事项,需要的朋友参考一下 摘要:     我们在开发过程中经常会遇到通过js获取或者改变DOM元素的样式,方法有很多,比如:通过更改DOM元素的class。现在我们讨论原生js来获取DOM元素的CSS样式,注意是获取不是设置     在开始之前先说下获取最终应用在元素上的所有CSS属性对象

  • 问题内容: 因此,如果有一个链接到网页的css文件,例如: 并且我想读取某个属性,例如div具有className =’layout’,并且我想使用JavaScript读取此属性的详细信息,我该怎么做? 我搜索了很多,但几乎没有运气,请提出建议。 问题答案: 您有两种选择: 手动枚举和解析对象(不建议使用,除非您要获取由某个选择器定义的所有特定样式属性)。 创建与选择器匹配的元素,然后使用或(IE

  • 问题内容: 在某些元素具有自定义CSS属性的应用程序中,是否可以通过JavaScript检索此类值? 例如 我可以通过以下两种方法访问color属性: 但是这些不适用于自定义属性。完全支持吗? 问题答案: 浏览器无法理解的CSS值将被丢弃,这说明了为什么无法通过来获取CSS值。 过去,您不得不依靠存储具有数据属性的数据并自己通过JavaScript处理继承。 但是,自此以来,“自定义属性”(也称为

  • 本文向大家介绍javascript获取元素的计算样式,包括了javascript获取元素的计算样式的使用技巧和注意事项,需要的朋友参考一下 背景 使用css控制页面有4种方式,分别为行内样式(内联样式)、内嵌式、链接式、导入式。 行内样式(内联样式)即写在html标签中的style属性中,如 <div style="width:100px;height:100px;"></div> 内嵌样式即写在