Javascript chrome中节点的getComputedStyle为空

Javascript chrome中节点的getComputedStyle为空,javascript,css,dom,Javascript,Css,Dom,我的javascript代码中有以下行: if(document.defaultView && document.defaultView.getComputedStyle){ strValue = document.defaultView.getComputedStyle(oElm).getPropertyValue(strCssRule); } // ... 检索我的节点的CSS值(例如:strcsrule='color')。它在Firefox上工作。它只能在静态页面

我的javascript代码中有以下行:

if(document.defaultView && document.defaultView.getComputedStyle){
    strValue = document.defaultView.getComputedStyle(oElm).getPropertyValue(strCssRule);
} // ...
检索我的节点的CSS值(例如:
strcsrule='color'
)。它在Firefox上工作。它只能在静态页面上的简单示例上在Chrome上工作。当试图将其集成到复杂的my应用程序中时,返回的
CSSStyleDeclaration
的每个字段都是空的

使用jQuery(
oElem=$(my_选择器).empty().get(0))检索节点
oElem
)。工作示例和我的应用程序之间的区别(至少是我能想到的唯一区别)在于,在计算时,我的节点还没有集成到DOM中(仍然生成完整的HTML)

即使在HTML deletation中显式设置CSS时(例如,我的节点是
),CSSStyleDeclaration对象仍然是空的


编辑:如前所述,问题在于元素尚未链接到DOM。我想这取决于浏览器的实现,以及如何处理这个案例。我不知道firefox是如何让它工作的,但我会找到其他东西。

如果您知道CSS规则的选择器,并且知道它是在CSS表中定义的,您可以搜索它。这就是我解决这个问题的方法

var page, rule, css;
var selector = ".my_selector";
var sheets = document.styleSheets;
for( page = 0; page < sheets.length; page++ ){
    // if you comment out this if-statement, you can search thru all of the page-wide stylesheets
    if( sheets[page].href.match(/.*\/filename\.css$/) ){
        for( rule = 0; rule < sheets[page].length; rule++ ){
            if( sheets[page][rule].selectorText === selector ){
                css = sheets[page][rule].style;
                break;
            }
        }
        break;
    }
}

// At this point, you have access to the CSS you're looking for.

console.log(css);
alert(css.backgroundColor);

// example from actual code:

if(css.borderTopWidth)this.speaker_default.edge._sizediff=Number(css.borderTopWidth.slice(0,-2));
var页面、规则、css;
变量选择器=“.my_选择器”;
var sheets=document.styleSheets;
用于(页面=0;页面
如果您知道CSS规则的选择器,并且知道它是在CSS表中定义的,您可以搜索它。这就是我解决这个问题的方法

var page, rule, css;
var selector = ".my_selector";
var sheets = document.styleSheets;
for( page = 0; page < sheets.length; page++ ){
    // if you comment out this if-statement, you can search thru all of the page-wide stylesheets
    if( sheets[page].href.match(/.*\/filename\.css$/) ){
        for( rule = 0; rule < sheets[page].length; rule++ ){
            if( sheets[page][rule].selectorText === selector ){
                css = sheets[page][rule].style;
                break;
            }
        }
        break;
    }
}

// At this point, you have access to the CSS you're looking for.

console.log(css);
alert(css.backgroundColor);

// example from actual code:

if(css.borderTopWidth)this.speaker_default.edge._sizediff=Number(css.borderTopWidth.slice(0,-2));
var页面、规则、css;
变量选择器=“.my_选择器”;
var sheets=document.styleSheets;
用于(页面=0;页面
“我的节点还没有集成到DOM中”——当然这就是原因。不在DOM中的元素不值得花费昂贵的任务来呈现它,因此没有可读取的computedStyles。首先将其放入DOM中——如果需要,隐藏(不使用display:none,因为这与不在DOM中的节点具有基本相同的效果)。但是为什么它在firefox中工作呢?不幸的是,我无法在不改变应用程序渲染过程的情况下集成它。它在Firefox中工作,因为“我的节点还没有集成到DOM中”——当然这就是原因。不在DOM中的元素不值得花费昂贵的任务来呈现它,因此没有可读取的computedStyles。首先将其放入DOM中——如果需要,隐藏(不使用display:none,因为这与不在DOM中的节点具有基本相同的效果)。但是为什么它在firefox中工作呢?不幸的是,如果不在应用程序的渲染过程中做很多更改,我就无法在那时集成它。