通过jQuery为将来创build的元素添加CSS规则
我有一个不寻常的问题。 我做了很多次这样的事情:
$('#selector').css('color','#00f');
我的问题是,我创build了一个<div id="selector">
,我调用上面的命令,它工作正常。
现在,在另一个事件中,稍后,我从DOM中删除该元素,并在稍后使用相同的ID再次添加该元素。 这个元素现在没有color:#00f
。
有没有办法可以在CSS中添加规则,这样会影响将来使用相同id
/ class
创build的项目? 我喜欢jQuery ,但是任何使用普通JavaScript的东西都可以。
它必须是dynamic的,我不知道放在一个CSS文件的类。 另外,我计划在应用程序的几个不同时间更改一个属性。 例如,将color
设置为black
, blue
, red
, black
。
我从@lucassp的答案去了,这是我最终的结果:
function toggleIcon(elem, classname) { if($(elem).attr('src')=='img/checkbox_checked.gif') { $(elem).attr('src', 'img/checkbox_unchecked.gif') //$('.'+classname).hide();//this was the old line that I removed $('html > head').append($('<style>.'+classname+' { display:none; }</style>')); } else { $(elem).attr('src', 'img/checkbox_checked.gif') //$('.'+classname).show();//this was the old line that I removed $('html > head').append($('<style>.'+classname+' { display:block; }</style>')); } }
我也想说, @纳尔逊可能是最“正确的”,虽然它需要更多的工作来进入应用程序代码总是正常工作,这不是我想花费的时刻。
如果将来我不得不重写(或写类似的东西),我会考虑detach()
。
这应该工作:
var style = $('<style>.class { background-color: blue; }</style>'); $('html > head').append(style);
当您计划从DOM中删除元素以便稍后重新插入元素时,请使用.detach()而不是.remove()
。
稍后重新插入时,使用.detach()
将保留您的CSS。 从文档:
.detach()方法与.remove()方法相同,不同之处在于.detach()保留所有与被删除元素相关联的jQuery数据。 这个方法在被删除的元素稍后重新插入DOM时非常有用。
这里是我之前写的一些JavaScript代码,让我添加,删除和编辑CSS:
function CSS(sheet) { if (sheet.constructor.name === 'CSSStyleSheet' ) this.sheet = sheet; else if (sheet.constructor.name === 'HTMLStyleElement') this.sheet = sheet.sheet; else throw new TypeError(sheet + ' is not a StyleSheet'); } CSS.prototype = { constructor: CSS, add: function( cssText ) { return this.sheet.insertRule(cssText, this.sheet.cssRules.length); }, del: function(index) { return this.sheet.deleteRule(index); }, edit: function( index, cssText) { var i; if( index < 0 ) index = 0; if( index >= this.sheet.cssRules.length ) return this.add(cssText); i = this.sheet.insertRule(cssText, index); if (i === index) this.sheet.deleteRule(i + 1); return i; } };
然后,如果需要新的样式表,构造为
var myCss = new CSS(document.head.appendChild( document.createElement('style')));
如果这个样式部分假设要多次更改,可以在html文件中设置一个id为style的标签:
<style id="myStyleTag"> </style>
那么你可以参考它与JS,编辑或删除内容,如:
var style = $('#myStyleTag'); styl.html('.class { background-color: blue; }');
通过这种方式,如果您多次更改样式部分,样式部分将不会变大,因为您不只是将其附加到头部,而是根据需要对其进行编辑。
你可以使用livequery插件 。
$('#selector').livequery(function() { $(this).css('color', '#00f'); });
最好的select是添加一个类:
.selected { color : #00f ; } $('#elemId').addClass('selected')
在你的CSS文件中创build一个CSS规则
.yourclass{ color: #00f; }
每当你创build元素时添加你的类:
$("#selector").addClass("yourclass");
只需使用一个类,例如:
CSS:
.setcolor { color: #fff; }
JavaScript的:
$('#selector').addClass('setcolor');
然后在需要时删除它:
$('#selector').removeClass('setcolor');
这是一个老select答案的问题,但增加dynamic的CSS来完成目标是没有必要的,并可能导致人们在错误的方向。
如果要使用jQuerydynamic设置元素上的样式,最好使用影响所需样式的类.addClass()
和.removeClass()
。
鉴于问题中的function:
function toggleIcon(elem, classname) { if($(elem).attr('src')=='img/checkbox_checked.gif') { $(elem).attr('src', 'img/checkbox_unchecked.gif'); $("." + classname).addClass("hidden"); } else { $(elem).attr('src', 'img/checkbox_checked.gif'); $("." + classname).removeClass("hidden"); } }
然后把这个添加到你的CSS:
.hidden {display: none;}
这也会改变颜色,正如问题中提到的那样:
.checkbox-red {color: red;} .checkbox-blue {color: blue;}
尝试这个
var style = $('<style>.class { background-color: blue !important; }</style>'); $('html > head').append(style);