2012-05-20 10 views
9

Używanie wtyczki wywołującej .jsp, która używa własnego arkusza stylów hostowanego zewnętrznie (jest to osadzanie skowytu - próbując manipulować jego wyglądem). Jeden pierwiastek Próbuję zmienić ma! Important tag na niego, a ja nie potrafię go zmienić ...zmiana koloru tła elementu div za pomocą jquery z ważnym znacznikiem

Próbowałem

<script type="text/javascript"> 
    $('.elementToChange').css({'background-color':'black'});​ 
</script> 

bezskutecznie. Pomysły?

+1

Pokaż tę część kodu HTML. – NAVEED

+0

Jeśli w zewnętrznym arkuszu stylów zadeklarowano '! Important', to ustawienie zastąpi inne ustawienia, niezależnie od zwykłej kolejności szczegółowości, chyba że późniejsze (bardziej szczegółowe) style * również * zadeklarują'! Important'. Nawiasem mówiąc, to pytanie może być istotne dla Ciebie: http://stackoverflow.com/questions/2655925/jquery-css-applying-important-styles –

+0

http://stackoverflow.com/questions/462537/overriding-important-style- using-javascript – Faust

Odpowiedz

27

to wygląda w bardziej up-to-date wersji jQuery (co najmniej 1,7 .2 i wyżej) możesz po prostu ustawić css:

$('#elementToChange').css('background-color', 'blue'); 

Zobacz http://jsfiddle.net/HmXXc/185/

W starszych wersjach jQuery i Zepto trzeba było usunąć css pierwszy:

// Clear the !important css 
$('#elementToChange').css('background-color', ''); 

A następnie przywrócić je za pomocą:

$('#elementToChange').css('background-color', 'blue'); 

Albo w jedną wkładką:

$('#elementToChange') 
    .css('background-color', '') 
    .css('background-color', 'blue'); 

Zobacz http://jsfiddle.net/HmXXc/186/.

odpowiedź Original:

Uwaga: to może być zły pomysł, ponieważ będzie ona usunąć wszelkie inne style inline

Chciałbym edytować atrybutu stylu bezpośrednio

$('.elementToChange').attr('style', 'background-color: blue !important'); 

http://jsfiddle.net/RichardTowers/3wemT/1/

+0

Mimo to może to być dowolny styl już dołączony do elementu, co może być złą wiadomością. Myślę, że dodanie klasy jest bezpieczniejsze. – RichardTowers

+0

To zadziałało - chociaż @RichardTowers miał rację. To wszystko wytarło (nie stanowi problemu, można odtworzyć). Dzięki! – elzi

4

Oto rozwiązanie:

http://jsfiddle.net/irpm/bdhpp/2/

Chodzi o to, aby dodać klasę:

$('.elementToChange').addClass('blackBg'); 
+0

, który prawie działał ... oto zrzut ekranu: http://d.pr/i/qxPl górna część to zewnętrzny arkusz stylów. background: blue jest tym, co dodałem z jquery. poniżej jest coś w moim css, które działało, ponieważ zewnętrzny css nie ma ważnego znacznika na ten temat. doradztwo? – elzi

+0

spróbuj załadować style.css po ybadge.css w swoim html. Możesz to zrobić? –

0

Możesz użyć funkcji Funkcja skrzydło:

function replaceBGColorImportant(element,newColor){ 
    var styles = element.getAttribute('style'); 
    styles = styles?styles.split(';'):[]; 
    var newStyles = []; 
    styles.map(function(x){ 
     if (x.split(':')[0] != "background-color") 
      newStyles.push(x); 
    }); 
    newStyles.push('background-color:#'+newColor+' !important'); 
    element.setAttribute('style',newStyles.join(';')); 
} 

wykonać w następujący sposób:

replaceBGColorImportant(document.body,'#009922'); 
0

Via wyrażenia regularnego: https://jsfiddle.net/7jj7gq3y/2/

HTML:

<div class="elementToChange" style=" background-color: yellow !important; width: 100px; height: 100px;"></div> 

javascript:

var setImportantStyle = function(element, attributeName, value) { 
    var style = element.attr('style'); 
    if (style === undefined) return; 
    var re = new RegExp(attributeName + ": .* !important;", "g"); 
    style = style.replace(re, ""); 
    element.css('cssText', attributeName + ': ' + value + ' !important;' + style); 
} 
setImportantStyle($('.elementToChange'), 'background-color', 'red'); 
1

Możesz manipulować!ważne css za pomocą następujących kroków, możesz użyć inline-css lub Internal css lub możesz załadować własne zewnętrzne css po zamówieniu tego wstępnie załadowanego css, to pomoże ci zastąpić to css swoim niestandardowym.

<html> 
    <head> 
    <!-- 
    //First Solution 
    //PreloaderCSS 
    //YourCustomCSS 

    //Second Solution 
    Internal CSS --> 
    </head> 
    <body> 
<!-- 
Third solution 
//Inline CSS 
-> 
    </body> 
    </html> 
Powiązane problemy