Есть ли способ выбрать / манипулировать псевдоэлементами CSS, такими как ::before
и ::after
(и старая версия с одной точкой с запятой), используя jQuery?
Например, моя таблица стилей имеет следующее правило:
.span::after{ content:'foo' }
Как я могу изменить 'foo' на 'bar', используя jQuery?
javascript
jquery
css
jquery-selectors
pseudo-element
JBradwell
источник
источник
Ответы:
Вы также можете передать содержимое в псевдоэлемент с атрибутом данных, а затем использовать jQuery для управления этим:
В HTML:
В jQuery:
В CSS:
Если вы хотите предотвратить отображение «другого текста», вы можете объединить это с решением seucolega, например:
В HTML:
В jQuery:
В CSS:
источник
attr
функции противcontent
свойства? Я удивлен, что никогда не слышал об этом ...attr()
, очень жаль, что я не смог использовать его с другими свойствами, чемcontent
. Демоattr()
за пределами CSS2, тогда как в самом CSS2attr()
он был определен только для этогоcontent
свойства.:before
, он поддерживаетattr()
в CSSВы могли бы подумать, что это будет простой вопрос, со всем остальным, что может сделать jQuery. К сожалению, проблема сводится к технической проблеме: css: after и: before правила не являются частью DOM и поэтому не могут быть изменены с использованием методов DOM jQuery.
Там являются способы манипулировать эти элементы , используя JavaScript и / или CSS обходные пути; какой из них вы используете, зависит от ваших конкретных требований.
Я собираюсь начать с того, что широко считается «лучшим» подходом:
1) Добавить / удалить заранее определенный класс
При таком подходе вы уже создали класс в своем CSS с другим
:after
или:before
стилем. Поместите этот «новый» класс позже в таблицу стилей, чтобы убедиться, что он переопределяет:Затем вы можете легко добавить или удалить этот класс, используя jQuery (или ванильный JavaScript):
Показать фрагмент кода
:before
или:after
не является полностью динамическим2) Добавить новые стили непосредственно в таблицу стилей документа
Можно добавить стили непосредственно в документ таблицы стилей, в том числе использовать JavaScript
:after
и:before
стили. jQuery не предоставляет удобного ярлыка, но, к счастью, JS не так уж и сложен:Показать фрагмент кода
.addRule()
и связанные.insertRule()
методы довольно хорошо поддерживаются сегодня.В качестве варианта вы также можете использовать jQuery для добавления в документ совершенно новой таблицы стилей, но необходимый код не так уж чист:
Показать фрагмент кода
Если мы говорим о «манипулировании» значениями, а не просто о добавлении к ним, мы также можем прочитать существующие
:after
или:before
стили, используя другой подход:Показать фрагмент кода
Мы можем заменить
document.querySelector('p')
на$('p')[0]
при использовании jQuery, для немного более короткого кода.3) Изменить другой атрибут DOM
Вы также можете использовать
attr()
в своем CSS для чтения определенного атрибута DOM. ( Если браузер поддерживает:before
, он также поддерживаетattr()
. ) Сочетая это сcontent:
некоторыми тщательно подготовленными CSS, мы можем динамически изменять содержимое (но не другие свойства, такие как поле или цвет):before
и:after
:JS:
Показать фрагмент кода
Это может быть объединено со вторым методом, если CSS не может быть подготовлен заранее:
Показать фрагмент кода
attr
в CSS можно применять только к строкам контента, а не к URL или цветам RGBисточник
Хотя они отображаются браузерами через CSS, как если бы они были похожи на другие настоящие элементы DOM, сами псевдоэлементы не являются частью DOM, поскольку псевдоэлементы, как следует из названия, не являются реальными элементами, и поэтому вы не можете выбирайте и манипулируйте ими напрямую с помощью jQuery (или любых других API-интерфейсов JavaScript, даже не API селекторов ). Это относится к любому псевдо-элементам, стили вы пытаетесь изменить с помощью сценария, а не только
::before
и::after
.Вы можете получить доступ только к стилям псевдоэлементов непосредственно во время выполнения через CSSOM (думаю
window.getComputedStyle()
), который не предоставляется jQuery за пределами.css()
, метод, который также не поддерживает псевдоэлементы .Вы всегда можете найти другие способы обойти это, например, например:
Применение стилей к псевдоэлементам одного или нескольких произвольных классов, а затем переключение между классами (см . Ответ seucolega для быстрого примера) - это идиоматический способ, поскольку он использует простые селекторы (а псевдоэлементы не являются) для различать элементы и состояния элементов по способу их использования
Манипулирование стилями, применяемыми к указанным псевдоэлементам, путем изменения таблицы стилей документа, что гораздо больше
источник
Вы не можете выбрать псевдоэлементы в jQuery, потому что они не являются частью DOM. Но вы можете добавить определенный класс к элементу Father и управлять его псевдоэлементами в CSS.
ПРИМЕР
В jQuery:
В CSS:
источник
Мы также можем полагаться на пользовательские свойства (или переменные CSS) , чтобы манипулировать псевдоэлементом. Мы можем прочитать в спецификации, что:
Учитывая это, идея состоит в том, чтобы определить пользовательское свойство внутри элемента, и псевдоэлемент просто наследует его; таким образом, мы можем легко изменить его.
1) Использование встроенного стиля :
2) Использование CSS и классов
3) Использование JavaScript
4) Использование jQuery
Он также может использоваться со сложными значениями:
Вы можете заметить, что я рассматриваю синтаксис
var(--c,value)
гдеvalue
значение по умолчанию и также называется запасным значением.Из той же спецификации мы можем прочитать:
И позже:
Если мы не устанавливаем пользовательское свойство ИЛИ, мы устанавливаем его
initial
ИЛИ, оно содержит недопустимое значение, тогда будет использоваться запасное значение. Использованиеinitial
может быть полезно в случае, если мы хотим сбросить пользовательское свойство к его значению по умолчанию.связанные с
Как сохранить наследуемое значение в пользовательском свойстве CSS (иначе переменные CSS)?
Пользовательские свойства CSS (переменные) для блочной модели
Обратите внимание, что переменные CSS могут быть доступны не во всех браузерах, которые вы считаете актуальными (например, IE 11): https://caniuse.com/#feat=css-variables
источник
В соответствии с тем, что предлагает Кристиан, вы также можете сделать:
источник
Вот способ доступа к свойствам стиля: after и: before, определенных в css:
источник
Если вы хотите манипулировать элементами :: before или :: after sudo полностью через CSS, вы можете сделать это JS. См. ниже;
Обратите внимание, как
<style>
элемента есть идентификатор, который вы можете использовать для его удаления и добавления к нему снова, если ваш стиль изменяется динамически.Таким образом, ваш элемент разрабатывается именно так, как вы хотите, используя CSS, с помощью JS.
источник
один работающий, но не очень эффективный способ - добавить правило в документ с новым содержимым и сослаться на него с помощью класса. в зависимости от того, что нужно, классу может потребоваться уникальный идентификатор для каждого значения в контенте.
источник
Вот HTML-код:
Вычисленный стиль на «до» был
content: "VERIFY TO WATCH";
Вот мои две строки jQuery, в которых используется идея добавления дополнительного класса для конкретной ссылки на этот элемент, а затем добавления тега стиля (с тегом! Важный) для изменения CSS значения содержимого элемента sudo:
$("span.play:eq(0)").addClass('G');
$('body').append("<style>.G:before{content:'NewText' !important}</style>");
источник
Спасибо вам всем! мне удалось сделать то, что я хотел: D http://jsfiddle.net/Tfc9j/42/ здесь посмотрите
я хотел, чтобы непрозрачность внешнего div отличалась от непрозрачности внутреннего div, и это изменилось одним щелчком мыши;) Спасибо!
источник
append
,html
лучшеВы можете создать поддельное свойство или использовать существующее и наследовать его в таблице стилей псевдоэлемента.
Кажется, это не работает для свойства "content" :(
источник
Это не практично, так как я не писал это для реальных целей, просто чтобы дать вам пример того, чего можно достичь.
в настоящее время это добавляет / или добавляет элемент Style, который содержит необходимые атрибуты, которые будут влиять на целевой элемент после псевдоэлемента.
это можно использовать как
а также
поскольку after: и before: псевдоэлементы не доступны напрямую через DOM, в настоящее время невозможно свободно редактировать Конкретные значения css.
Мой путь был просто примером, и он не подходит для практики, вы можете изменить его, попробовать некоторые свои собственные приемы и сделать его правильным для реального использования.
так что делайте свои собственные эксперименты с этим и другими!
С уважением - Адарш Хегде.
источник
Я всегда добавляю свою собственную функцию утилит, которая выглядит следующим образом.
или используйте ES6
источник
Зачем добавлять классы или атрибуты, когда вы можете просто добавить
style
к заголовкуисточник
Здесь много ответов, но ни один из них не помогает манипулировать CSS
:before
или:after
даже не принятым.Вот как я предлагаю это сделать. Предположим, ваш HTML похож на это:
И тогда вы устанавливаете его: before в CSS и проектируете его так:
Пожалуйста, обратите внимание, что я также установил
content
атрибут в самом элементе, чтобы вы могли легко убрать его позже. Сейчас естьbutton
щелчок, по которому вы хотите изменить цвет: before на зеленый и размер шрифта на 30px. Вы можете достичь этого следующим образом:Определите CSS с вашим требуемым стилем на некотором классе
.activeS
:Теперь вы можете изменить стиль: before, добавив класс в элемент your: before следующим образом:
Если вы просто хотите получить содержание
:before
, это можно сделать так:В конечном итоге, если вы хотите динамически изменить
:before
содержимое с помощью jQuery, вы можете добиться этого следующим образом:Нажатие на кнопку «changeBefore» выше изменится
:before
содержимое#something
на «22», которое является динамическим значением.Я надеюсь, что это помогает
источник
Я использовал переменные, определенные
:root
внутри,CSS
чтобы изменить:after
(то же самое относится и к:before
) псевдоэлементу , в частности, чтобы изменитьbackground-color
значение для стиля,anchor
определенного.sliding-middle-out:hover:after
иcontent
значение для другогоanchor
(#reference
) в следующей демонстрации, которая генерирует случайные цвета с помощью JavaScript / JQuery:HTML
CSS
JS / JQuery
источник
attr()
исключениемcontent
, действительно скудна. Вы можете проверить caniuse.com для этого.:root
и поддержка css-переменных лучше, но все еще не так широко распространена, поскольку ее поддержка довольно нова. (также проверьте поддержку на caniuse.com)Я создал плагин jQuery для добавления псевдо-правил css, например,
.css()
для определенных элементов.Применение:
источник
источник
Вы можете использовать мой плагин для этой цели.
JQuery:
Значения должны быть указаны, как в обычной функции jQuery.css
Кроме того, вы также можете получить значение параметра псевдоэлемента, как в обычной функции jQuery.css:
JS:
Показать фрагмент кода
GitHub: https://github.com/yuri-spivak/managing-the-properties-of-pseudo-elements/
источник
Кто-то еще прокомментировал добавление к элементу head с полным элементом стиля, и это неплохо, если вы делаете это только один раз, но если вам нужно сбросить его более одного раза, вы получите массу элементов стиля. Поэтому, чтобы предотвратить это, я создал пустой элемент стиля в голове с идентификатором и заменил его на innerHTML следующим образом:
Тогда JavaScript будет выглядеть так:
Теперь в моем случае мне нужно было установить высоту элемента before, основанного на высоте другого, и он будет меняться при изменении размера, поэтому с помощью этого я могу запускаться
setHeight()
каждый раз, когда окно изменено, и оно будет заменено<style>
должным образом.Надеюсь, это поможет тому, кто застрял, пытаясь сделать то же самое.
источник
У меня есть кое-что другое для вас, что легко и эффективно.
источник