Javascript 克隆HTML文档并生成字符串表示时,不会复制原始文档中的CSS样式规则

Javascript 克隆HTML文档并生成字符串表示时,不会复制原始文档中的CSS样式规则,javascript,html,css,Javascript,Html,Css,我正在尝试生成HTML文档的字符串表示形式,以便将其发送到另一个服务,该服务将生成当前文档的克隆版本以供打印 原始HTML文档需要使用Javascript添加一些样式: // create the style node var $style = $("<style type='text/css' rel='stylesheet' />").appendTo($("head")); // create the style rule var rules = []; rules.push

我正在尝试生成HTML文档的字符串表示形式,以便将其发送到另一个服务,该服务将生成当前文档的克隆版本以供打印

原始HTML文档需要使用Javascript添加一些样式:

// create the style node
var $style = $("<style type='text/css' rel='stylesheet' />").appendTo($("head"));

// create the style rule
var rules = [];
rules.push(".bluecolor {  }");
if ($style[0].styleSheet) { // IE
    $style[0].styleSheet.cssText = rules.join(" ");
} else {
    $style[0].appendChild(document.createTextNode(rules.join(" ")));
}

// later on in the code...

// set the style rule's color to blue
var sheets = document.styleSheets;
for (var i = 0; i < sheets.length; i++) {
    if ((sheets[i].ownerNode || sheets[i].owningElement) == $style[0]) {
        var stylesheet = sheets[i];
        var cssRules =  (stylesheet.cssRules || stylesheet.rules);
        for (var i = 0; i < cssRules.length; i++) {
            if (matches = /\.bluecolor/.exec(cssRules[i].selectorText)) {
                cssRules[i].style.color = "blue";
                cssRules[i].style.width = "10px";
            }
        }
        break;
    }
}
我认为这与以下事实有关:当通过Javascript修改规则时,原始文档上的样式节点在Chrome/Firefox中不会得到更新。但IE的情况并非如此。(这是一个Chrome bug吗?)


我的最终目标是生成原始文档的字符串表示(在Chrome中)。但是,我无法通过cloneNode实现这一点,并且/或者我通过Javascript更新CSS样式的方式是不正确的。有什么建议吗?

我看到的唯一解决方案是手动将原始document.styleSheets的cssRules.cssText直接复制到原始DOM的style元素中。但这看起来像是一个黑客,非常麻烦。整个事情看起来荒谬地麻烦。我意识到某些项目可能需要一些奇怪的解决方案,但你究竟为什么要使用javascript来实现这些风格呢?无论如何,您是否正在尝试在页面完全加载之前进行“克隆”?
var clonedDocument = document.getElementsByTagName('html')[0].cloneNode(true);