DEMO 此功能在 firefox 中不起作用,但在 chrome 中 100% 起作用。这是什么原因?
我创建了一个 js 代码来保存元素 css 供以后使用。它在 chrome 中工作但在 firefox 中不工作,这是为什么?
function css(a){
var sheets = document.styleSheets, o = {};
for(var i in sheets) {
var rules = sheets[i].rules || sheets[i].cssRules;
for(var r in rules) {
if(a.is(rules[r].selectorText)) {
o = $.extend(o, css2json(rules[r].style), css2json(a.attr('style')));
}
}
}
return o;
}
function css2json(css){
var s = {};
if(!css) return s;
if(css instanceof CSSStyleDeclaration) {
for(var i in css) {
if((css[i]).toLowerCase) {
s[(css[i]).toLowerCase()] = (css[css[i]]);
}
}
} else if(typeof css == "string") {
css = css.split("; ");
for (var i in css) {
var l = css[i].split(": ");
s[l[0].toLowerCase()] = (l[1]);
};
}
return s;
}
var style = css($("#elementToGetAllCSS"));
$("#elementToPutStyleInto").css(style);
var style = css($("#elementToGetAllCSS1"));
$("#elementToPutStyleInto1").css(style);
最佳答案
在 Firefox 中存在冲突,现在 bug 已修复
(function($){
$.fn.getStyleObject = function(){
var dom = this.get(0);
var style;
var returns = {};
if(window.getComputedStyle){
var camelize = function(a,b){
return b.toUpperCase();
};
style = window.getComputedStyle(dom, null);
for(var i = 0, l = style.length; i < l; i++){
var prop = style[i];
var camel = prop.replace(/\-([a-z])/g, camelize);
var val = style.getPropertyValue(prop);
returns[camel] = val;
};
return returns;
};
if(style = dom.currentStyle){
for(var prop in style){
returns[prop] = style[prop];
};
return returns;
};
return this.css();
}
})(jQuery)
var styles = $("#elementToGetAllCSS").getStyleObject();
$("#elementToPutStyleInto").css(styles);
var styles1 = $("#elementToGetAllCSS1").getStyleObject();
$("#elementToPutStyleInto1").css(styles1);
关于javascript - 此功能在 Firefox 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16912674/