请问有人可以帮忙吗?我有两个问题:
我想使用jQuery动态更改CSS类规则。
.classname{color:red; font-size:14px;}
如上例所示,我有一个名为
.classname
的类,现在我想只更改.classname
内的字体大小而不是颜色,不通过添加CSS内联来实现。我想创建并保存对
.classname
的更改到文件中,记住可能会保存完整的样式表或保存在文件中的类名数量。
有什么最简单和更好的方法可以做到这一点吗?
谢谢!
请问有人可以帮忙吗?我有两个问题:
我想使用jQuery动态更改CSS类规则。
.classname{color:red; font-size:14px;}
如上例所示,我有一个名为.classname
的类,现在我想只更改.classname
内的字体大小而不是颜色,不通过添加CSS内联来实现。
我想创建并保存对.classname
的更改到文件中,记住可能会保存完整的样式表或保存在文件中的类名数量。
有什么最简单和更好的方法可以做到这一点吗?
谢谢!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="imagetoolbar" content="false">
<meta http-equiv="imagetoolbar" content="no">
<style type="text/css">
.classname {
color: red;
font-size: 14px;
}
</style>
<script type="text/javascript">
window.onload = function() {
document.getElementById("button").onclick = function() {
var ss = document.styleSheets;
for (var i=0; i<ss.length; i++) {
var rules = ss[i].cssRules || ss[i].rules;
for (var j=0; j<rules.length; j++) {
if (rules[j].selectorText === ".classname") {
rules[j].style.color = "green";
}
}
}
};
}
</script>
</head>
<body>
<h1 class="classname">Some red text</h1>
<button id="button">Make text green</button>
</body>
</html>
对于你的第二个问题,我没有时间编写一个解决方案,但是它需要像上面那样读取CSS声明,并使用CssRule对象的cssText
属性构建一个字符串,最终通过Ajax POST请求发送到服务器。服务器端由你处理。styleSheets
,并在第一次遇到该selectorText
后中断循环。这样,您只修改一个样式表,即具有最高优先级的样式表。 - Ionuț G. Stan最近,我需要修复Autocomplete小部件的一些jquery主题问题。我想改变自动完成小部件的背景颜色。
因此,我查找了CSS,并发现autocomplete类像这样定义
.ui-autocomplete { position: absolute; cursor: default; }
因此,在我的程序中,我使用以下语句通过添加背景属性来更改类。请注意,我保留其他属性不变,否则它将破坏现有功能。
$("<style type='text/css'> .ui-autocomplete { position: absolute; cursor: default; background:black; color:white} </style>").appendTo("head");
只有在以下情况下才应采用此方法:
有一个jQuery插件可以实现这一点:http://plugins.jquery.com/project/jquerycssrule
对于我所做的一个小项目,我提取了必要的要点并创建了以下函数:
function addCSSRule(sel, prop, val) {
for(var i = 0; i < document.styleSheets.length; i++){
var ss = document.styleSheets[i];
var rules = (ss.cssRules || ss.rules);
var lsel = sel.toLowerCase();
for(var i2 = 0, len = rules.length; i2 < len; i2++){
if(rules[i2].selectorText && (rules[i2].selectorText.toLowerCase() == lsel)){
if(val != null){
rules[i2].style[prop] = val;
return;
}
else{
if(ss.deleteRule){
ss.deleteRule(i2);
}
else if(ss.removeRule){
ss.removeRule(i2);
}
else{
rules[i2].style.cssText = '';
}
}
}
}
}
var ss = document.styleSheets[0] || {};
if(ss.insertRule) {
var rules = (ss.cssRules || ss.rules);
ss.insertRule(sel + '{ ' + prop + ':' + val + '; }', rules.length);
}
else if(ss.addRule){
ss.addRule(sel, prop + ':' + val + ';', 0);
}
}
.classname
的DOM元素的字体大小。$('.classname').css('font-size','14px');
但是客户端JavaScript无法从Web浏览器访问文件系统,因此您需要其他方式(即服务器端代码)来对CSS文件本身进行更改。
你也可以尝试使用JSS,它对我非常有效:https://github.com/Box9/jss
Download and include jss.js in your HTML:
<script type="text/javascript" src="jss.js"></script>
Add new rule (or extend existing rule):
jss('.special', { color: 'red', fontSize: '2em', padding: '10px' });
Retrieve existing rule:
jss('.special').get();
Returns:
{ 'color': 'red', 'font-size': '2em', 'padding-bottom': '10px', 'padding-left': '10px', 'padding-right': '10px', 'padding-top': '10px' }
Remove existing rule:
jss('.special').remove();
DOM Level 2允许直接操作样式表的CSS规则。 例如:
var ss = document.styleSheets[1]; // ref to the first stylesheet
ss.cssRules[0].style.backgroundColor="blue"; // modification of the 1rst rule
如果你想让用户精确地管理设计的特定元素(如标题颜色,字体等),可以再次使用服务器端技术(在我看来更好)或 javascript 保存像头部=蓝色、字体=Arial这样的内容,并使用 jQuery 将存储的内容应用到你的页面上。
希望这能给你一个概述。
对于第一部分,我通常会指定一个样式块,并使用jQuery开启/关闭它。例如:
<style type="text/css" id="my-style" media="all">
.classname{color:red; font-size:14px;}
</style>
然后您可以通过设置disabled属性来进行切换,例如:
$('#my-style').prop('disabled', true);
$('#my-style').prop('disabled', false);
由于应用于头部部分的样式会相互“重载”,它们最后使用的是针对所有相关元素的样式的append()
,除非之前有!important
。
用于分配CSS内容的函数应该是text()
而不是html()
,以防止意外注入代码。
var dynamic_css = function(class_name){
return '.' + class_name + ' {color:red; font-size:14px;}';
}
var styles = $('<style type="text/css">');
styles.text(dynamic_css('my_classname'));
$('html head').append(styles);
稍后:
styles.remove();
将一个类分配给样式元素以便稍后识别也可以很好地工作