Změna CSS pomocí Javascriptu
Odesláno v January 4, 2012 | Kategorie Javascript, Programování, webdesign | Leave a Comment
Včera jsem potřeboval jednoduchou věc na Bookmarky.cz: zobrazit a skrývat tlačítko (pro smazání) u každého odkazu. Stránka používá JQuery, tak by to nebyl problém.
$('.prepinac').toggle(
function(){
$('.t_tlacitko').show();
},
function(){
$('.t_tlacitko').hide();
}
)
JQuery funguje tak, že najde všechny objekty odpovídající kritériu “.t_tlacitko” a každému nastaví nový styl. Problém se vyjeví v okamžiku, kdy na stránce potřebujeme vytvořit nový element .t_tlacitko. Ten dostane do vínku pouze výchozí styl, tedy u nového prvku se tlačítko se zobrazí, i když máme ostatní pěkně schované. Bylo by třeba updatovat všechny prvky po každém vytvoření záložky, což by asi nikdo soudný nedělal.
Ideální je skrývat je přímo změnou pravidla v CSS. Přiznám se, myslel jsem, že to lze javascriptem snadněji. Internet Explorer totiž používá pro CSSrules jiné označení než standardy-uznávající okolní svět.
Nakonec jsem našel toto řešení:
/*****Library - directly change css rule *****/
//Example:changecss('.ClassName','width','280px'); changecss('#IDname','color','red');
function changecss(theClass,element,value) {
var cssRules;
for (var S = 0; S < document.styleSheets.length; S++){
try{
document.styleSheets[S].insertRule(theClass+' { '+element+': '+value+'; }',document.styleSheets[S][cssRules].length);
} catch(err){
try{document.styleSheets[S].addRule(theClass,element+': '+value+';');
}catch(err){
try{
if (document.styleSheets[S]['rules']) {
cssRules = 'rules';
} else if (document.styleSheets[S]['cssRules']) {
cssRules = 'cssRules';
} else {
//no rules found... browser unknown
}
for (var R = 0; R < document.styleSheets[S][cssRules].length; R++) {
if (document.styleSheets[S][cssRules][R].selectorText == theClass) {
if(document.styleSheets[S][cssRules][R].style[element]){
document.styleSheets[S][cssRules][R].style[element] = value;
break;
}
}
}
} catch (err){}
}
}
}
}
Vykonání skriptu by mělo být je mnohem rychlejší než pomocí JQuery, protože neměníme styl postupně u všech prvků, ale přímo v hlavním CSS.
$('.prepinac').toggle(
function(){
changecss('.t_tlacitko','display','block')
},
function(){
changecss('.t_tlacitko','display','none')
}
)
Komentáře
Váš komentář: