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ář:








