jak usunąć właściwość css za pomocą javascript?


195

czy można usunąć właściwość CSS elementu za pomocą JavaScript? np. mam div.style.zoom = 1.2, teraz chcę usunąć właściwość zoom poprzez JavaScript?


3
Wyjaśnij: czy próbujesz usunąć klasę z jakiegoś elementu, czy atrybut z jakiegoś elementu?
Jan Hančič,

1
Przepraszam za to, nie klasę, atrybut elementu.
sob.

dlaczego głosować? to wystarczająco przyzwoite pytanie nie?
Roland Bouman

2
Cześć siedziałem, nie rozumiem - dlaczego oznaczyłeś odpowiedź naiwistów jako „zaakceptowaną odpowiedź”? Mam na myśli, że jego rozwiązanie jest dobre na wypadek, gdybyś chciał znaleźć elementy według klasy, ale wszystko w twoim pytaniu wskazuje, że szukałeś metody zmiany efektu ustawienia właściwości stylu lokalnego. Z pewnością moja odpowiedź lepiej pasuje do problemu? Być może źle zrozumiałem twoje pytanie?
Roland Bouman

1
@RolandBouman faktycznie zaakceptowana odpowiedź powinna zostać zmieniona na Edvinasa Ilčenko, ponieważ dotyczy ona tego, o co proszono o usunięcie, a nie przejścia na domyślną. Twoja odpowiedź wciąż ma wartość, więc zredagowałem ją, aby wyjaśnić to rozróżnienie.
Whitneyland

Odpowiedzi:


187

Masz dwie opcje:

OPCJA 1:

Możesz użyć metody removeProperty . Usunie styl z elementu.

el.style.removeProperty('zoom');

OPCJA 2:

Możesz ustawić wartość domyślną:

el.style.zoom = "";

Efektywne powiększenie będzie teraz zgodne z definicjami określonymi w arkuszach stylów (poprzez tagi link i style). Tak więc ta składnia zmodyfikuje tylko lokalny styl tego elementu.


… Wraz z CSS użytkownika i domyślnymi stylami przeglądarki.
Quentin

Zrozumiałem, że OP oznacza, że ​​chcieli to zrobić tak, jakby nie ustawili właściwości stylu elementu, a dokładnie to, co dostarczyłeś. Próbowałem użyć el.style.removeProperty ('zoom'); (lub „wypełnij”, w rzeczywistości w moim przypadku), które wydają się robić to samo w IE i są ignorowane przez inne przeglądarki. Z jakiegoś powodu byłem zaskoczony, że ustawienie pustego ciągu ma ten sam efekt i wydaje się działać na wszystkich (najnowszych wersjach) przeglądarek.
Shavais 21.04.16

Czy to zachowanie jest określone gdziekolwiek w standardzie? Nie mogę tego znaleźć :-(
Oliver Joseph Ash,

@OliverJosephAsh tak, jest to udokumentowane, patrz odpowiedź poniżej stackoverflow.com/a/7901886/700206
Whitneyland



10

Możesz użyć obiektu styleSheets:

document.styleSheets[0].cssRules[0].style.removeProperty("zoom");

Zastrzeżenie nr 1: Musisz znać indeks swojego arkusza stylów i indeks swojej reguły.

Zastrzeżenie # 2: Ten obiekt jest implementowany niekonsekwentnie przez przeglądarki; to, co działa w jednym, może nie działać w innych.


To wydaje się bardzo kruche. Czy nie pęknie, gdy zmienią się twoje wskaźniki?
Casey Rodarmor,

Tak. To właśnie mówi zastrzeżenie nr 1.
james.garriss

Mój Chrome 26 nie ma CSSStyleRule.prototype.removeProperty= (W rzeczywistości CSSStyleRulenie ma żadnych metod. = (
Rudie,

CSSStyleSheet.prototype.removeRulena pomoc.
Rudie,

@Rudie, prawda CSSStyleSheet.prototype.deleteRule?
roka

7
element.style.height = null;

wynik:

<div style="height:100px;"> 
// results: 
<div style="">

Wygląda na to, że ustawienie stylu na null nie działa w IE11.
MaximeW,

1
Dlaczego ktoś powinien dbać o IEprzeglądarki? Celowo ignoruję je już od lat.
T.Todua

4

Możesz spróbować znaleźć wszystkie elementy, które mają tę klasę i ustawić właściwość „zoom” na „none”.

Jeśli używasz biblioteki javascript jQuery, możesz to zrobić za pomocą $(".the_required_class").css("zoom","")

Edycja: Usunąłem to stwierdzenie, ponieważ okazało się, że to nieprawda, jak wskazano w komentarzu i innych odpowiedziach, że rzeczywiście jest to możliwe od 2010 roku.

Fałsz: nie ma ogólnie znanego sposobu modyfikowania arkuszy stylów z JavaScript.


5
Tak jest. Programowa modyfikacja arkuszy stylów za pomocą javascript nie jest trudna. Działa w różnych przeglądarkach z dużą wydajnością i naprawdę ma sens przy zmianie jednej właściwości, która powinna być taka sama na wielu elementach. Podobnie jak w przypadku stycznia 2010 r. Oto krótki przykład: stackoverflow.com/questions/14927706/…
Clox

Clox: Dodawanie arkuszy stylów, które programowo zastępują niektóre właściwości - oczywiście! Modyfikowanie już załadowanych - o tym nie słyszałem.
naiwniści

Czy ma to być css (), a nie attr (). A może jest to attr () w IE?
Alex KeySmith

tak naprawdę powinno być css, nie attr, masz rację.
naiwiści


0

To powinno załatwić sprawę - ustawianie wbudowanego stylu na normalny dla powiększenia:

$ („div”). attr („style”, „zoom: normal;”);


1
Pytanie brzmiało: jak usunąć styl, ta odpowiedź zniszczy wszystkie istniejące style i zastąpi je jednym nowym wpisem.
Whitneyland

0

właściwie, jeśli już znasz tę właściwość, zrobi to ...

na przykład:

<a href="test.html" style="color:white;zoom:1.2" id="MyLink"></a>

    var txt = "";
    txt = getStyle(InterTabLink);
    setStyle(InterTabLink, txt.replace("zoom\:1\.2\;","");

    function setStyle(element, styleText){
        if(element.style.setAttribute)
            element.style.setAttribute("cssText", styleText );
        else
            element.setAttribute("style", styleText );
    }

    /* getStyle function */
    function getStyle(element){
        var styleText = element.getAttribute('style');
        if(styleText == null)
            return "";
        if (typeof styleText == 'string') // !IE
            return styleText;
        else  // IE
            return styleText.cssText;
    } 

Pamiętaj, że działa to tylko dla stylów wbudowanych ... nie stylów określonych przez klasę lub coś w tym stylu ...

Inna uwaga: być może będziesz musiał uciec przed niektórymi postaciami w instrukcji zamiany, ale masz pomysł.


-3

Aby zmienić wszystkie klasy dla elementu:

document.getElementById("ElementID").className = "CssClass";

Aby dodać dodatkową klasę do elementu:

document.getElementById("ElementID").className += " CssClass";

Aby sprawdzić, czy klasa jest już zastosowana do elementu:

if ( document.getElementById("ElementID").className.match(/(?:^|\s)CssClass(?!\S)/) )

1
Pytanie brzmiało: jak usunąć styl, ta odpowiedź nie ma z tym nic wspólnego.
Whitneyland
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.