如何将所有用户提供的样式从一个对象复制到另一个对象

时间:2017-01-03 09:08:17

标签: javascript html css

有人询问here有关如何将css样式从一个对象复制到另一个对象的问题。普遍接受的答案是:

/^[0-9]+(\.[0-9]{1,})+\S+\w?$/

但是,我的情况有点不同。我有一个脚本创建var p = document.getElementById("your_p_id"); var div = document.createElement("div"); div.innerHTML = "your div content"; div.style.cssText = document.defaultView.getComputedStyle(p, "").cssText; 来设定span标记,然后隐藏select。这样可以更轻松地进行CSS样式设置,因为相对于坚定的select标记,我可以更轻松地设置span的样式。

当我使用select时,要将从select中应用的任何样式复制到span,它最终看起来像select标签。由于所有内置样式都应用于跨度而不仅仅是用户输入,因此我必须用数十个覆盖所有这些css属性,这首先打算使用span标记。

有没有办法只复制用户提供的样式而不是用于样式化元素的整个样式表?

到目前为止,我已经能够通过将cssTextclass从select转移到span来转移应用的样式,但我的挑战是将样式直接应用于id标记(即。在样式/样式表中,它显示为:select

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

function ApplyStyles(select, span) {
    var select = document.querySelector(select);
    var span = document.querySelector(span);
    var sheets = document.styleSheets;

    for(var i = 0; i < sheets.length; i++) {
        var rules = sheets[i].cssRules || sheets[i].rules;   
        for(var r = 0; r < rules.length; r++) {
            var rule = rules[r];
            var selectorText = rule.selectorText;
            if(document.querySelector(selectorText) == select){
        for(var l = 0; l < rule.style.length; l++){
            span.style[rule.style[l]] = rule.style[rule.style[l]];
        }
            }
        }
    }
}

然后使用这样的函数:

ApplyStyles("#selection", "#span");

这里是一个JSFiddle:https://jsfiddle.net/rsLnaw56/2/

这是如何工作的,它会找到应用于select元素的所有外部样式,并将其应用于span元素。

相关问题