改变cssRules用JavaScript是不是在客户端永久,越来越偏后回传全军覆没(changin

2019-10-20 22:16发布

我产生从Page_Load中数据库值一些CSS再裹上它喜欢 -

CssDiv.InnerHtml =  "<style id=\"main_styles\" type=\"text/css\">\n" + {Css as string} + "\n</style>"

这里CssDiv是喜欢 -

<div id="CssDiv" runat="server"></div>

用户被允许与拾色器和下拉菜单更改这些CSS值。 在选择器或下拉的变化,我想提出AJAX调用与选定值的服务器,它保存到数据库中。 现就本次申请成功,我必须根据用户的选择来改变$内容(“风格#main_styles”)。

问题是

1)当我改变的CSS它被反射在页面上而不是下的开发工具(打开时用鼠标右键单击要检查元素)。 例如,假设以下CSS-

#zoneBody .blocktextContent {
    background-color: #99daee;
}

现在,从选择器,当我的代码运行正在应用的元素“#zoneBody .blocktextContent”关于#1066cc页面上,但是当我在显影检查元素安慰它仍然列明用户选择#1066cc

#zoneBody .blocktextContent {
    background-color: #99daee; // while it should be- "background-color: #1066cc;"
}

2)我所做的修改将无法在浏览器中永久的,即当页面上的任何其他因素导致部分后回来,虽然我不在服务器上触摸CssDiv但其重置用户的选择。 (我有一个更新面板,一个包装完整的页面内容 ,甚至CssDiv ......这是造成部分后背上)。

我使用下面的代码应用用户的选择 -

var layoutelement= "#zoneBody .blocktextContent";
var style = "background-color";
var stylevalue= "#1066cc"; // user's selection

var sheets = document.styleSheets;
for (var i = 0; i < sheets.length; i++) {
    var sheet = sheets[i];
    if (sheet.ownerNode.id == "main_styles") {
        var rules = sheet.cssRules;
        for (var j = 0; j < rules.length; j++) {
            var rule = rules[j];
            if (rule.selectorText == layoutelement) {
                rule.style.setProperty(style, stylevalue);
                // I also tried "rule.style[style] = stylevalue;"
                break;
            }
        }
        break;
    }
}

我不能使用 -

$(layoutelement).css(style, stylevalue);

因为layoutelement可能更为复杂喜欢 -

layoutelement = "#zoneBody .blockTextContent a,#zoneBody .blockTextContent a:link,#zoneBody .blockTextContent a:visited,#zoneBody .blockTextContent a .yshortcuts";

我希望我足够清楚的,但如果你需要更多的说明..让我知道意见。谢谢

Answer 1:

而不是改变的样式值的, 为什么不写的样式下提前了,只是切换元素的类 ? 您可以使用jQuery addClassremoveClasstoggleClass如果你想。 远远高于与CSS样式摆弄更实用的定义本身。



Answer 2:

对于问题1,问题可能是开发人员工具(或视图中的开发人员工具内)使用的是不显示应用的样式,只是在样式表匹配基础上,选择该元素的规则。 或者,换句话说,它只能说明适用于您正在检查的元素样式表中的CSS规则。 一看就知道是在给定的时间应用的样式,您将需要在DOM或使用JavaScript和返回的CSSStyleDeclaration对象检查元素检查风格的getComputedStyle 。



文章来源: changing cssRules with javascript is not permanent on client, getting wiped out after partial post back