【问题标题】:Javascript: Get typed CSS values NOT computed valuesJavascript:获取键入的 CSS 值而不是计算值
【发布时间】:2010-10-05 21:48:39
【问题描述】:

显然它可以从 Firebug 完成,但我不确定他们是否对 CSSDeclarations 进行了大量处理,或者 DOM 中是否有我遗漏的东西,但我想抓住元素或样式表的 TYPED 样式,而不是 DOM 似乎返回的 cssText。

边框就是一个例子。如果我的元素有border:1px solid #000,DOM 会返回给我

border-top-width:1px;
border-right-width-value:;
border-right-width-ltr-source:;
border-right-width-rtl-source:;
border-bottom-width:1px;
border-left-width-value:;
etc.....

我真正想要的只是我输入的内容,即border:1px solid #000。

如果有人对此有任何想法,将不胜感激。

这里是 CSS 的 DOM2 规范:http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule 这就是我不确定我是否遗漏了什么,或者我是否应该寻找其他地方的地方。

这是我编写的代码,似乎工作正常,但是,就像我说的,现在它只返回浏览器呈现的样式和计算的样式。 无需查看代码。我只是在寻找整体建议。我刚刚发布了代码来帮助某人,如果他们正在寻找开始的东西......

bg.fn.cssNavigator = function(){
var el = bg(this)[0]; //Only take first element.
var context = bg(this).context; //What document are we looking at?
if(!document.getElementById('plugins-bg_css_navigator-wrapper')){
    jQuery("body").append('<div id="plugins-bg_css_navigator-wrapper"><div id="plugins-bg_css_navigator-css"></div></div>');
}
var t = '';
t = t+'<div>Inline Style</div><div>';
if(el.style){
    var els = el.style;
    for(var i=0; i<els.length; i++){
        var s = els[i];
        t = t+s+':'
        t = t+window.getComputedStyle(el, null).getPropertyValue(s)+';<br />';      }
}
t = t+'</div>';
t = t+'<div>Computed Style</div><div>';
var cs = window.getComputedStyle(el, null);
for(var i = 0; i<cs.length; i++){
    //if(typeof cs[i] === "function"){ break; }
    t = t+cs[i]+':'+cs.getPropertyValue(cs[i])+'<br />';    
}
t = t+'</div>';
var ssc = context.styleSheets;
for( var i in ssc ){
    var isTab = false;
    if(undefined !== jQuery(ssc[i].ownerNode).attr("href")){
        t = t+'<div>'+jQuery(ssc[i].ownerNode).attr("href")+'</div>';
        isTab = true;
    }else if(undefined !== ssc[i].ownerNode){
        t = t+'<div>Current File</div>';
        isTab = true;
    }
    if(isTab){
        t = t+'<div stylesheet="'+i+'">';
        try{
            var sscr = ssc[i].cssRules;
            for( var j in sscr ){
                if(undefined !== ssc[i].cssRules[j].cssText){
                    t = t+ssc[i].cssRules[j].cssText+'<br />';
                }
            }
        //If we get an error, then all the stylesheets are not loaded, let's exit and try again in 100 milliseconds
        }catch(e){ setTimeout( function(){ bg(el, context).cssNavigator(); }, 100 ); return false; }
        t = t+'</div>';
    }
}
jQuery("#plugins-bg_css_navigator-css").html(t);
};

编辑########################### 实际上,我误解了 Firebug。似乎 Firefox 的实际插件在处理这些东西方面确实做得更好,但如果您使用的是 Firebug Lite,您只需获得渲染样式。

【问题讨论】:

    标签: javascript css


    【解决方案1】:

    我确实找到了我正在寻找的答案。

    cssText 是我正在寻找的。这里注明:http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration

    它不起作用的原因是因为我在页面加载时尝试它,但它在实际呈现发生之前被触发,所以它返回未定义。

    我正在做一些重大的修改,并在页面完全加载后尝试了它,它出现了。

    耶!

    【讨论】:

    • 这是style 属性,而不是写在 CSS 文件中的内容。
    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 2017-05-22
    • 2020-01-03
    • 2018-03-31
    • 2014-01-06
    • 2012-09-19
    • 1970-01-01
    • 2023-01-30
    相关资源
    最近更新 更多