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

如何通过仅给出其ID获得元素的所有应用样式?

贺博厚
2023-03-14
问题内容

我试图编写一个函数,该函数接受元素的ID并给出应用于该元素的所有样式属性(及其值)的列表。它应该考虑内联样式以及css文件中定义的样式。

当我在参数中提供样式属性名称以及元素的ID时,我可以使函数起作用,但是我只想传递元素的ID,并且应该能够获取所有样式属性以及值。

函数应该类似于getStyleById(elementId);

到目前为止,PFB的代码片段:

var styleNode = [];
    var styles;
    var sty = x.style;

    var len = sty.length;

    for (var i = 0; i < len; i++) {
        styles = sty.item(i);

        if (x.currentStyle)     //IE for External/Global Styles
        {
            var a = x.currentStyle[styles];

            styleNode.push(styles + ":" + a);
        }
        else if (document.defaultView && document.defaultView.getComputedStyle)    //Firefox,Chrome,Safari for External/Global Styles
        {
            var b = document.defaultView.getComputedStyle(x, "").getPropertyValue(styles);

            styleNode.push(styles + ":" + b);
        }
        else           //Works in Inline Styles only
        {
            var c = x.style[styles];

            styleNode.push(styles + ":" + c);
        }
    }

任何帮助,将不胜感激。

问候,

Manishekhawat


问题答案:

使用以下方法:

  • 遍历CSSStyleDeclaration对象的索引(getComputedStyle)以获取每个已知的属性名称。使用getPropertyValue+这个名称来获取值。
    代码优化:不要getComputedStyle用于每次迭代,而是将其存储在循环外部的变量中。

  • 对使用普通for ( name in object )循环currentStyle

  • 对内联样式使用相同的循环方法

码:

function getStyleById(id) {
    return getAllStyles(document.getElementById(id));
}
function getAllStyles(elem) {
    if (!elem) return []; // Element does not exist, empty list.
    var win = document.defaultView || window, style, styleNode = [];
    if (win.getComputedStyle) { /* Modern browsers */
        style = win.getComputedStyle(elem, '');
        for (var i=0; i<style.length; i++) {
            styleNode.push( style[i] + ':' + style.getPropertyValue(style[i]) );
            //               ^name ^           ^ value ^
        }
    } else if (elem.currentStyle) { /* IE */
        style = elem.currentStyle;
        for (var name in style) {
            styleNode.push( name + ':' + style[name] );
        }
    } else { /* Ancient browser..*/
        style = elem.style;
        for (var i=0; i<style.length; i++) {
            styleNode.push( style[i] + ':' + style[style[i]] );
        }
    }
    return styleNode;
}


 类似资料:
  • 问题内容: 我有一个元素。如何将CSS样式应用于此元素的所有子元素?我只想将样式应用于子元素。不是它的大孩子。 我可以用 这对所有孩子都有效,但我想对所有孩子都适用的解决方案。我以为我可以用,但是 不起作用。 编辑 该选择不使用Firefox 26应用规则,并有根据萤火没有其他规则的保证金。如果我替换为,它会起作用。 问题答案: 这些子元素的后代将(可能)继承分配给那些子元素的大多数样式。 您需要

  • 问题内容: 我正在尝试通过angularjs在html中查找元素。 这是html: 我试图通过类名多文件来获取按钮元素,然后我尝试 但是它不起作用,并且尝试过,但仅对标签起作用。 在angularjs中,有没有可以通过ID或类名获取元素的函数? 问题答案: 是DOM文档上的函数。它既不是jQuery也不是jqLit​​e函数。 使用时不要在类名前添加句号: 将其包装在jqLit​​e中(如果在An

  • 问题内容: 我知道我可以按元素获取范围: 我该如何反向:使用scope来查找DOM元素,例如? 我想这样做是为了调试。我的作用域树显示了一些内容,我想确定它的来源。 问题答案: 尽管不是很性感,但每个dom节点都有一个ng-scope类,因此您可以通过技术进行如下操作:

  • 问题内容: CSS代码(我需要什么) HTML代码 CSS没有按我的预期工作。 我实际上想为所有元素定义样式,但带有的样式除外。 我怎样才能做到这一点? 问题答案: 使用:not选择器: 更新:而不是: 更新: CSS2选择器 ,类似于 Tom Heard-s的 答案:

  • 我正在寻找一些东西可以帮助我获得票证的id创建在第一行。 我知道我可以通过使用不同的准备好的查询来简化这一点,但我不想(试着看看这样做是否可行,是否不使用多查询方式)。 我知道mysql中的LAST_INSERT_ID(),但我有点担心同时插入几行.... 在我的研究过程中,我也看到有人直接选择指定的ID,但这是一个很大的资源成本。 我也看到@@插入,我没有看到他们之间有很大的区别,所以我也有同样