Я не уверен, что это то, что вы хотели. Вы хотели переопределить это, что, как уже отмечалось, легко выполняется $('#element').css('display', 'inline').
То, что я искал, было решением УДАЛИТЬ встроенный стиль полностью. Мне нужно это для плагина, который я пишу, где я должен временно установить некоторые встроенные значения CSS, но позже хочу удалить их; Я хочу, чтобы таблица стилей вернула себе контроль. Я мог бы сделать это, сохранив все исходные значения и затем вернув их обратно в строку, но это решение кажется мне намного чище.
Установка значения свойства стиля в пустую строку - например, $('#mydiv').css('color', '')удаляет это свойство из элемента, если оно уже было применено напрямую, будь то в атрибуте стиля HTML, с помощью .css()метода jQuery или с помощью прямого DOM-манипулирования свойством стиля. Однако он не удаляет стиль, который был применен с помощью правила CSS в таблице стилей или <style>элементе.
@ximi - Спасибо, парень. Я думал об этом, и я решил, что это не такая пустая трата времени. Он может быть использован для проверки встроенных стилей, для которых в настоящее время нет поддержки в jQuery ( .css('property')дает вам значение, но он не сообщает вам, пришел ли он из встроенного стиля).
Джозеф Силбер
Я пришел к тому же самому выводу - пустая строка, кажется, делает то, что мы хотим. Это официально не задокументировано в API, но, надеюсь, продолжит работать.
Jon Z
@Jonz - Это будет официально задокументирован (хотя я не знаю , когда он был добавлен, я не помню , что там , когда я первоначально отправил это). Кроме того, я не думаю, что jQuery здесь что-то делает. Нативный styleобъект, кажется, ведет себя таким же образом. Я исправил свой ответ этой информацией.
Джозеф Сильбер
Работает ли это с такими вещами, как font-family, или - портит регулярное выражение?
TMH
4
@mosh - Почему бы тебе просто не использовать $('#element').css('display', '')?
Джозеф Силбер
158
.removeAttr("style") просто избавиться от целого тега стиля ...
.attr("style") проверить значение и посмотреть, существует ли встроенный стиль ...
Это повлияет на все встроенные стили, а не только display.
SLaks
1
звучит неплохо, попробуйте и дайте вам знать, я никогда не использую встроенные стили, как правило, поэтому рад очистить все встроенные стили
Haroldo
11
@ Слакс хорошо, вот что я имел в виду под «избавиться от целого тега стиля»;)
Гейзенберг
Здравствуй. Есть ли способ проверить, был ли применен какой-то «стиль» к ... $ ('*') из любого источника, например, встроенного стиля, с атрибутом стиля, таким как font, b, strong, css file ... перед попыткой удалить / сбросить что-нибудь или просто сбросить все одним выстрелом?
Мильче Патерн
Поскольку удаление каждого встроенного стиля в отдельности не приводит к удалению styleатрибута (теперь пустого) , это все же заслуживает внимания.
Brilliand
26
Самый простой способ удалить встроенные стили (сгенерированные jQuery):
$(this).attr("style","");
Встроенный код должен исчезнуть, и ваш объект должен адаптировать стиль, предопределенный в ваших файлах CSS.
эээ, что? Я, наверное, что-то не понимаю. Я думаю о том <div style="display:block;">, $('div').hide().
Коби
3
@Kobi: hideрассматривается один особый случай изменения встроенных стилей. Этот ответ касается всех случаев. ( hide/showтакже есть ограничение как два, два значения которых переключаются. т.е. none-> block или none-> inline.)
Joel
@Joel: hide/ showзапомнит старое значение displayи восстановит его правильно.
Слакс
@SLaks: Круто. Должно быть, это было добавлено недавно, так как я помню, что раньше у меня были проблемы с этим.
Джоэл
12
Вы можете создать плагин jquery следующим образом:
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]);});};})();
использование
$(".foo").removeInlineCss();//remove all inline styles
$(".foo").removeInlineCss("display");//remove one inline style
$(".foo").removeInlineCss("color font-size font-weight");//remove several inline styles
Этот ответ содержит очень аккуратный однострочный трюк, который полезен даже без jQuery и о котором не знают многие разработчики - вызов elem.style.removeProperty('margin-left')удалит только margin-leftиз styleатрибута (и вернет значение этого свойства). Для IE6-8 это elem.style.removeAttribute().
craigpatik
9
Ленивый путь (который заставит будущих дизайнеров проклинать ваше имя и убивать вас во сне):
#myelement {
display: none !important;}
Отказ от ответственности: я не защищаю этот подход, но это, безусловно, ленивый путь.
ОБНОВЛЕНИЕ:
я сделал интерактивную скрипку, чтобы поиграть с различными методами и их результатами. По- видимому, не существует большая разница между set to empty string, set to faux valueи removeProperty(). Все они приводят к одному и тому же отступлению, которое является либо заранее заданным правилом CSS, либо значением браузера по умолчанию.
отсюда и «ленивый»! нельзя найти, какой бит какого плагина это!
Гарольдо
4
Я не знаю, как вы определяете ленивый, я просто ответил, как я это сделаю. Кажется, имеет смысл исправить проблему там, где она возникла, а не исправлять вещи вне плагина. Я предвижу мессессесс при этом.
Джош Стодола
Каким образом? Если вы редактируете плагин, у вас могут возникнуть проблемы после обновления до новой версии, которая отменит ваши изменения и испортит макет. Кто вспомнит через год или около того, что вы сделали там одну маленькую корректировку? Я всегда пытаюсь найти другое решение, кроме изменения исходного кода плагина
Если вы, ребята, что-то проголосовали, пожалуйста, оставьте комментарий.
Он Нрик
1
Я думаю , вы получили downvotes , потому что вы не ответили на задан вопрос : "jQuery plugin is applying an inline style (display:block). I'm feeling lazy and want to override it with display:none". Хотя ваш текст правильный, ваш код не решает вопрос.
Ушел кодирование
Решил проблему, которая у меня была. Tnx.
Йодалр
0
$("#element").css({ display: "none" });
Сначала я попытался удалить встроенный стиль в css, но он не работает и новый стиль, такой как display: ни один не будет перезаписан. Но в JQuery это работает так.
У меня была похожая проблема со свойством width. Я не смог удалить! Важное из кода, и так как он нуждался в этом стиле в новом шаблоне, я добавил Id (modalstyling) к элементу, а затем добавил следующий код в шаблон:
<scripttype="text/javascript">
$('#modalstyling').css('width','');//Removal of width !important
$('#modalstyling').width('75%');//Set custom width</script>
Ответы:
Обновление: пока работает следующее решение, есть гораздо более простой способ. Увидеть ниже.
Вот то, что я придумал, и я надеюсь, что это пригодится - вам или кому-либо еще:
Это удалит этот встроенный стиль.
Я не уверен, что это то, что вы хотели. Вы хотели переопределить это, что, как уже отмечалось, легко выполняется
$('#element').css('display', 'inline')
.То, что я искал, было решением УДАЛИТЬ встроенный стиль полностью. Мне нужно это для плагина, который я пишу, где я должен временно установить некоторые встроенные значения CSS, но позже хочу удалить их; Я хочу, чтобы таблица стилей вернула себе контроль. Я мог бы сделать это, сохранив все исходные значения и затем вернув их обратно в строку, но это решение кажется мне намного чище.
Вот это в формате плагина:
Если вы включите этот плагин на странице перед вашим скриптом, вы можете просто позвонить
и это должно сработать.
Обновление : теперь я понял, что все это бесполезно. Вы можете просто установить его пустым:
и он будет автоматически удален для вас.
Вот цитата из документов :
Я не думаю, что jQuery делает что-то магическое здесь; кажется, что
style
объект делает это изначально .источник
.css('property')
дает вам значение, но он не сообщает вам, пришел ли он из встроенного стиля).style
объект, кажется, ведет себя таким же образом. Я исправил свой ответ этой информацией.$('#element').css('display', '')
?.removeAttr("style")
просто избавиться от целого тега стиля ....attr("style")
проверить значение и посмотреть, существует ли встроенный стиль ....attr("style",newValue)
установить что-то другоеисточник
display
.style
атрибута (теперь пустого) , это все же заслуживает внимания.Самый простой способ удалить встроенные стили (сгенерированные jQuery):
Встроенный код должен исчезнуть, и ваш объект должен адаптировать стиль, предопределенный в ваших файлах CSS.
Работал на меня!
источник
Вы можете установить стиль, используя
css
метод jQuery :источник
<div style="display:block;">
,$('div').hide()
.hide
рассматривается один особый случай изменения встроенных стилей. Этот ответ касается всех случаев. (hide/show
также есть ограничение как два, два значения которых переключаются. т.е. none-> block или none-> inline.)hide
/show
запомнит старое значениеdisplay
и восстановит его правильно.Вы можете создать плагин jquery следующим образом:
использование
источник
elem.style.removeProperty('margin-left')
удалит толькоmargin-left
изstyle
атрибута (и вернет значение этого свойства). Для IE6-8 этоelem.style.removeAttribute()
.Ленивый путь (который заставит будущих дизайнеров проклинать ваше имя и убивать вас во сне):
Отказ от ответственности: я не защищаю этот подход, но это, безусловно, ленивый путь.
источник
источник
источник
Если вы хотите удалить свойство в атрибуте стиля, а не просто установить его на что-то другое, вы используете
removeProperty()
метод:ОБНОВЛЕНИЕ:
я сделал интерактивную скрипку, чтобы поиграть с различными методами и их результатами. По- видимому, не существует большая разница между
set to empty string
,set to faux value
иremoveProperty()
. Все они приводят к одному и тому же отступлению, которое является либо заранее заданным правилом CSS, либо значением браузера по умолчанию.источник
Если отображение является единственным параметром в вашем стиле, вы можете выполнить эту команду, чтобы удалить все стили:
Означает, что если ваш элемент выглядел так раньше:
Теперь ваш элемент будет выглядеть так:
источник
Вот фильтр селектора inlineStyle, который я написал, который подключается к jQuery.
В вашем случае вы можете использовать это как:
источник
Измените плагин, чтобы больше не применять стиль. Это было бы намного лучше, чем удаление стиля после.
источник
$el.css({ height : '', 'margin-top' : '' });
и т.д...
Просто оставьте второй параметр пустым!
источник
"jQuery plugin is applying an inline style (display:block). I'm feeling lazy and want to override it with display:none"
. Хотя ваш текст правильный, ваш код не решает вопрос.$("#element").css({ display: "none" });
Сначала я попытался удалить встроенный стиль в css, но он не работает и новый стиль, такой как display: ни один не будет перезаписан. Но в JQuery это работает так.
источник
У меня была похожая проблема со свойством width. Я не смог удалить! Важное из кода, и так как он нуждался в этом стиле в новом шаблоне, я добавил Id (modalstyling) к элементу, а затем добавил следующий код в шаблон:
источник