Nie jestem pewien, czy tego właśnie chciałeś. Chciałeś to zmienić, co, jak już wspomniano, jest łatwe do zrobienia $('#element').css('display', 'inline').
To, czego szukałem, to rozwiązanie, aby całkowicie usunąć styl wbudowany. Potrzebuję tego do wtyczki, którą piszę, w której muszę tymczasowo ustawić niektóre wbudowane wartości CSS, ale chcę je później usunąć; Chcę, aby arkusz stylów przejął kontrolę. Mógłbym to zrobić, przechowując wszystkie oryginalne wartości, a następnie przywracając je do pierwotnego stanu, ale to rozwiązanie wydaje mi się znacznie czystsze.
Ustawienie wartości właściwości stylu na pusty ciąg - np. $('#mydiv').css('color', '')- usuwa tę właściwość z elementu, jeśli została już bezpośrednio zastosowana, czy to w atrybucie stylu HTML, poprzez .css()metodę jQuery , czy poprzez bezpośrednią manipulację DOM właściwości stylu. Nie usuwa jednak stylu, który został zastosowany z regułą CSS w arkuszu stylów lub <style>elemencie.
@ximi - Dzięki stary. Myślałem o tym i zdecydowałem, że to nie była taka strata czasu. Można go zastosować do sprawdzania stylów wbudowanych, dla których obecnie nie ma obsługi w jQuery ( .css('property')daje wartość, ale nie mówi, czy pochodzi ze stylu wbudowanego).
Joseph Silber,
Doszedłem do tego samego wniosku niezależnie - pusty ciąg wydaje się robić to, co chcemy. Nie jest to oficjalnie udokumentowane w API, ale mam nadzieję, że nadal będzie działać.
Jon z
@Jonz - jest oficjalnie udokumentowany (chociaż nie wiem, kiedy został dodany; nie pamiętam, żeby go tam widziałem, kiedy go pierwotnie opublikowałem). Poza tym nie sądzę, że jQuery tutaj coś robi. Obiekt rodzimy stylewydaje się zachowywać w ten sam sposób. Poprawiłem swoją odpowiedź tymi informacjami.
Joseph Silber,
Czy to działa z takimi rzeczami jak rodzina czcionek, czy też - nie psuje wyrażenia regularnego?
TMH
4
@mosh - Dlaczego po prostu nie używasz $('#element').css('display', '')?
Joseph Silber,
158
.removeAttr("style") aby pozbyć się całego tagu stylu ...
.attr("style") aby przetestować wartość i sprawdzić, czy istnieje styl wbudowany ...
Wpłynie to na wszystkie style wbudowane, nie tylko display.
SLaks,
1
brzmi nieźle, spróbuj i daj znać, nigdy nie używam stylów wbudowanych, więc z radością usuwam wszystkie style wbudowane
Haroldo,
11
@Slaks dobrze, to miałem na myśli przez „pozbyć się całego tagu stylu”;)
heisenberg
Cześć. czy istnieje sposób, aby sprawdzić, czy jakiś „styl” został zastosowany do ... $ („*”), z dowolnego źródła, takiego jak styl wbudowany, atrybut stylu, taki jak font, b, strong, plik css .. przed próbą usunąć / zresetować coś lub po prostu zresetować wszystkie jeden strzał?
Milche Patern
Ponieważ usunięcie każdego stylu wstawianego osobno nie usuwa styleatrybutu (teraz pusty) , jest to nadal warte odnotowania.
Brilliand
26
Najprostszym sposobem na usunięcie stylów wbudowanych (wygenerowanych przez jQuery) jest:
$(this).attr("style","");
Kod wewnętrzny powinien zniknąć, a obiekt powinien dostosować styl predefiniowany w plikach CSS.
tak, co? Prawdopodobnie czegoś nie rozumiem. Myślę o <div style="display:block;">, $('div').hide().
Kobi
3
@Kobi: hidedotyczy jednego specjalnego przypadku modyfikacji stylów wbudowanych. Ta odpowiedź dotyczy wszystkich przypadków. ( hide/showmają również ograniczenie jako dwie, które dwie wartości są przełączane, tj. brak-> blok lub brak-> wstawka.)
Joel
@Joel: hide/ showzapamięta starą wartość displayi przywróci ją poprawnie.
SLaks,
@SLaks: Cool. To musiało zostać dodane niedawno, ponieważ pamiętam, że miałem z tym wcześniej problemy.
Joel
12
możesz utworzyć wtyczkę jquery w ten sposób:
jQuery.fn.removeInlineCss =(function(){var rootStyle = document.documentElement.style;var remover =
rootStyle.removeProperty // modern browser|| rootStyle.removeAttribute // old browser (ie 6-8)returnfunction removeInlineCss(properties){if(properties ==null)returnthis.removeAttr('style');
proporties = properties.split(/\s+/);returnthis.each(function(){for(var i =0; i < proporties.length ; i++)
remover.call(this.style, proporties[i]);});};})();
stosowanie
$(".foo").removeInlineCss();//remove all inline styles
$(".foo").removeInlineCss("display");//remove one inline style
$(".foo").removeInlineCss("color font-size font-weight");//remove several inline styles
Ta odpowiedź zawiera bardzo schludną sztuczkę w jednym wierszu, która jest przydatna nawet bez jQuery i którą niewielu deweloperów może wiedzieć - wywołanie elem.style.removeProperty('margin-left')usunie tylko margin-leftz styleatrybutu (i zwróci wartość tej właściwości). W przypadku IE6-8 jest to elem.style.removeAttribute().
craigpatik
9
Leniwy sposób (który spowoduje, że przyszli projektanci przeklną twoje imię i zamordują cię we śnie):
#myelement {
display: none !important;}
Uwaga: Nie popieram tego podejścia, ale z pewnością jest to leniwy sposób.
AKTUALIZACJA:
Zrobiłem interaktywne skrzypce, aby bawić się różnymi metodami i ich wynikami. Najwyraźniej nie ma dużej różnicy między set to empty string, set to faux valuea removeProperty(). Wszystkie powodują tę samą awarię - która jest albo wstępnie określoną regułą CSS, albo wartością domyślną przeglądarki.
stąd „leniwy”! Nie mogę się dowiedzieć, który to kawałek wtyczki!
Haroldo,
4
Nie wiem, jak definiujesz leniwego, właśnie odpowiedziałem, jak bym to zrobił. Wydaje się, że sensowne jest rozwiązanie problemu, skąd pochodzi, a nie załatanie sprawy poza wtyczką. Przewiduję bałagan, gdy robię to w ten sposób.
Josh Stodola
Która droga? Jeśli edytujesz wtyczkę, możesz mieć problemy po aktualizacji do nowej wersji, która zastąpi twoją zmianę i zepsuje układ. Kto zapamięta za jakiś czas, że dokonałeś tam tej małej korekty? Zawsze staram się znaleźć inne rozwiązanie niż modyfikowanie kodu źródłowego wtyczki
Jeśli głosujecie na coś w dół, zostawcie komentarz.
He Nrik
1
Przypuszczam, że masz na downvotes bo nie odpowiedziałeś na pytanie zadawane : "jQuery plugin is applying an inline style (display:block). I'm feeling lazy and want to override it with display:none". Chociaż twój tekst jest poprawny, twój kod nie rozwiązuje pytania.
Gone Coding
Rozwiązałem problem, który miałem. Tnx.
yodalr
0
$("#element").css({ display: "none" });
Na początku próbowałem usunąć styl wbudowany w css, ale to nie działa i nowy styl, taki jak display: żaden nie zostanie nadpisany. Ale w JQuery działa to tak.
Miałem podobny problem z właściwością width. Nie mogłem usunąć! Ważne z kodu, a ponieważ potrzebowałem tego stylu na nowym szablonie, dodałem do elementu Id (modalstyling), a następnie dodałem następujący kod do szablonu:
<scripttype="text/javascript">
$('#modalstyling').css('width','');//Removal of width !important
$('#modalstyling').width('75%');//Set custom width</script>
Odpowiedzi:
Aktualizacja: podczas gdy poniższe rozwiązanie działa, istnieje o wiele łatwiejsza metoda. Patrz poniżej.
Oto, co wymyśliłem i mam nadzieję, że to się przyda - Tobie lub komukolwiek innemu:
Spowoduje to usunięcie tego wbudowanego stylu.
Nie jestem pewien, czy tego właśnie chciałeś. Chciałeś to zmienić, co, jak już wspomniano, jest łatwe do zrobienia
$('#element').css('display', 'inline')
.To, czego szukałem, to rozwiązanie, aby całkowicie usunąć styl wbudowany. Potrzebuję tego do wtyczki, którą piszę, w której muszę tymczasowo ustawić niektóre wbudowane wartości CSS, ale chcę je później usunąć; Chcę, aby arkusz stylów przejął kontrolę. Mógłbym to zrobić, przechowując wszystkie oryginalne wartości, a następnie przywracając je do pierwotnego stanu, ale to rozwiązanie wydaje mi się znacznie czystsze.
Oto format wtyczki:
Jeśli umieścisz tę wtyczkę na stronie przed skryptem, możesz po prostu zadzwonić
i to powinno załatwić sprawę.
Aktualizacja : Teraz zdałem sobie sprawę, że to wszystko jest daremne. Możesz po prostu ustawić puste:
i zostanie automatycznie dla Ciebie usunięty.
Oto cytat z dokumentów :
Nie sądzę, że jQuery robi tutaj magię; wydaje się, że
style
obiekt robi to natywnie .źródło
.css('property')
daje wartość, ale nie mówi, czy pochodzi ze stylu wbudowanego).style
wydaje się zachowywać w ten sam sposób. Poprawiłem swoją odpowiedź tymi informacjami.$('#element').css('display', '')
?.removeAttr("style")
aby pozbyć się całego tagu stylu ....attr("style")
aby przetestować wartość i sprawdzić, czy istnieje styl wbudowany ....attr("style",newValue)
ustawić to na coś innegoźródło
display
.style
atrybutu (teraz pusty) , jest to nadal warte odnotowania.Najprostszym sposobem na usunięcie stylów wbudowanych (wygenerowanych przez jQuery) jest:
Kod wewnętrzny powinien zniknąć, a obiekt powinien dostosować styl predefiniowany w plikach CSS.
Pracował dla mnie!
źródło
Możesz ustawić styl za pomocą
css
metody jQuery :źródło
<div style="display:block;">
,$('div').hide()
.hide
dotyczy jednego specjalnego przypadku modyfikacji stylów wbudowanych. Ta odpowiedź dotyczy wszystkich przypadków. (hide/show
mają również ograniczenie jako dwie, które dwie wartości są przełączane, tj. brak-> blok lub brak-> wstawka.)hide
/show
zapamięta starą wartośćdisplay
i przywróci ją poprawnie.możesz utworzyć wtyczkę jquery w ten sposób:
stosowanie
źródło
elem.style.removeProperty('margin-left')
usunie tylkomargin-left
zstyle
atrybutu (i zwróci wartość tej właściwości). W przypadku IE6-8 jest toelem.style.removeAttribute()
.Leniwy sposób (który spowoduje, że przyszli projektanci przeklną twoje imię i zamordują cię we śnie):
Uwaga: Nie popieram tego podejścia, ale z pewnością jest to leniwy sposób.
źródło
źródło
źródło
Jeśli chcesz usunąć właściwość z atrybutu stylu - a nie tylko ustawić ją na coś innego - skorzystaj z
removeProperty()
metody:AKTUALIZACJA:
Zrobiłem interaktywne skrzypce, aby bawić się różnymi metodami i ich wynikami. Najwyraźniej nie ma dużej różnicy między
set to empty string
,set to faux value
aremoveProperty()
. Wszystkie powodują tę samą awarię - która jest albo wstępnie określoną regułą CSS, albo wartością domyślną przeglądarki.źródło
Jeśli wyświetlanie jest jedynym parametrem Twojego stylu, możesz uruchomić to polecenie, aby usunąć cały styl:
Oznacza to, że jeśli Twój element wyglądał wcześniej tak:
Teraz twój element będzie wyglądał następująco:
źródło
Oto filtr wyboru inlineStyle, który napisałem, który podłącza się do jQuery.
W twoim przypadku możesz użyć tego w następujący sposób:
źródło
Zmień wtyczkę, aby nie stosować stylu. Byłoby to znacznie lepsze niż późniejsze usunięcie stylu.
źródło
$el.css({ height : '', 'margin-top' : '' });
itp...
Po prostu zostaw drugi parametr pusty!
źródło
"jQuery plugin is applying an inline style (display:block). I'm feeling lazy and want to override it with display:none"
. Chociaż twój tekst jest poprawny, twój kod nie rozwiązuje pytania.$("#element").css({ display: "none" });
Na początku próbowałem usunąć styl wbudowany w css, ale to nie działa i nowy styl, taki jak display: żaden nie zostanie nadpisany. Ale w JQuery działa to tak.
źródło
Miałem podobny problem z właściwością width. Nie mogłem usunąć! Ważne z kodu, a ponieważ potrzebowałem tego stylu na nowym szablonie, dodałem do elementu Id (modalstyling), a następnie dodałem następujący kod do szablonu:
źródło