kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 jumancy
jumancy
Вопрос

Как изменить значение содержимого псевдоэлемента :before с помощью Javascript

У меня есть граф, построенный с помощью CSS, который динамически изменяется с помощью JS. Я показываю максимальное значение графика с помощью псевдоэлемента как:

.graph:before {
    content:""; //value that want set by JS
    position:absolute;
    top:0;
    left:0;
}

Поэтому мне нужно установить это значение с помощью JS. Я пробовал $(".graph:before").css("content", hh);, но это не помогло. Как получить это значение?

31 2012-05-08T08:35:56+00:00 6
Программирование
javascript
jquery
Santosh D
Santosh D
2-го февраля 2017 в 10:44
2017-02-02T10:44:12+00:00
Дополнительно
Источник
Редактировать
#16132347

Надеюсь, приведенный ниже фрагмент поможет, вы можете указать нужное вам значение content через JS, используя функцию CSS attr(). Ниже у вас есть два варианта: использовать JavaScript или jQuery:

jQuery:

$('.graph').on('click', function () {
    //do something with the callback
    $(this).attr('data-before','anything'); //anything is the 'content' value
});

JavaScript:

var graphElem = document.querySelector('.graph');
graphElem.addEventListener('click', function (event) {
    event.target.setAttribute('data-before', 'anything');
});

CSS:

.graph:before {
    content: attr(data-before); /* value that that refers to CSS 'content' */
    position:absolute;
    top: 0;
    left: 0;
}
 boop
boop
Редактировал ответ 13-го сентября 2019 в 12:25
45
0
Решение / Ответ
James Allardice
James Allardice
8-го мая 2012 в 8:37
2012-05-08T08:37:40+00:00
Дополнительно
Источник
Редактировать
#16132345

Обновление (2018): как было отмечено в комментариях, теперь вы можете сделать это.

Вы не можете изменять псевдоэлементы через JavaScript, поскольку они не являются частью DOM. Лучше всего определить другой класс в CSS с необходимыми стилями и добавить его к элементу. Поскольку из вашего вопроса следует, что это невозможно, возможно, вам нужно рассмотреть возможность использования настоящего элемента DOM вместо псевдоэлемента.

James Allardice
James Allardice
Редактировал ответ 10-го апреля 2018 в 7:47
24
0
Gennadiy Gorbulin
Gennadiy Gorbulin
22-го мая 2018 в 1:34
2018-05-22T13:34:54+00:00
Дополнительно
Источник
Редактировать
#16132349

Вы можете использовать CSS переменной

:root {
  --h: 100px;
}

.elem:after {
  top: var(--h);
}

let y = 10;

document.documentElement.style.setProperty('--h', y + 'px')

https://codepen.io/Gorbulin/pen/odVQVL

16
0
 Learner
Learner
14-го ноября 2016 в 1:42
2016-11-14T13:42:17+00:00
Дополнительно
Источник
Редактировать
#16132346

Люди, которые все еще ищут решение этой проблемы, могут сделать это следующим образом, используя jQuery:

<button id="changeBefore">Change</button>
<script>
    var newValue = '22';//coming from somewhere
    var add = '<style>.graph:before{content:"'+newValue+'"!important;}</style>';
    $('#changeBefore').click(function(){
        $('body').append(add);
    });
</script>

Этот пример иллюстрирует, что при нажатии на кнопку: changeBefore, значение для .graph:before будет изменяться в соответствии с новым динамическим значением для него.

Для более подробного описания изменения стиля элемента :before или :after или получения его содержимого:

Предположим, что ваш HTML выглядит следующим образом:

<div id="something">Test</div>

А затем вы устанавливаете его :before в CSS и оформляете его следующим образом:

#something:before{
   content:"1st";
   font-size:20px;
   color:red;
}
#something{
  content:'1st';
}

Обратите внимание, что я также установил атрибут content в самом элементе, чтобы вы могли легко убрать его позже. Теперь есть кнопка, нажав на которую, вы хотите изменить цвет :before на зеленый и размер шрифта на 30px. Этого можно добиться следующим образом:

Определите css с нужным вам стилем для некоторого класса .activeS:

.activeS:before{
   color:green !important;
   font-size:30px !important;
 }

Теперь вы можете изменить стиль :before, добавив класс к элементу :before следующим образом:

<button id="changeBefore">Change</button>
<script>
    $('#changeBefore').click(function(){
        $('#something').addClass('activeS');
    });
</script>

Если вы просто хотите получить содержимое :before, это можно сделать следующим образом:

<button id="getContent">Get Content</button>
<script>
    $('#getContent').click(function(){
        console.log($('#something').css('content'));//will print '1st'
    });
</script>

Надеюсь, это поможет.

4
0
 FrancoSF
FrancoSF
1-го октября 2017 в 2:03
2017-10-01T02:03:32+00:00
Дополнительно
Источник
Редактировать
#16132348

Я считаю, что есть простое решение, используя привлекательность (функции), чтобы определить содержание псевдо элемент. Вот рабочий пример с использованием 'название' атрибут, но она должна работать также с пользовательскими атрибутами.:

в

document.getElementById('btn_change1').addEventListener("click", function(){
    document.getElementById('test_div').title='Status 1';
});

document.getElementById('btn_change2').addEventListener("click", function(){       
    document.getElementById('test_div').title='Status 2';
});
#test_div {
   margin: 4em;
   padding:2em;
   background: blue;
   color: yellow;
}

#test_div:after {
   content:attr(title);
   background: red;
   padding:1em;
}
<button id='btn_change1'>Change div:after to [Status 1]</button>
<button id='btn_change2'>Change div:after to [Status 2]</button>

<div id='test_div' title='Initial Status'>The element to modify</div>

в

2
0
 GerA
GerA
20-го февраля 2019 в 11:34
2019-02-20T11:34:12+00:00
Дополнительно
Источник
Редактировать
#16132350

Если вы используете что-то вроде onoffswitch и хотите перевести CSS содержание атрибута i18next затем вы можете использовать один из i18next рамки пример на GitHub (i18next на jQuery Framework) и затем расширена функция с этим кодом:

var before = i18next.t('onoffswitch.before');
var after = i18next.t('onoffswitch.after');
$('.onoffswitch-inner')
    .attr('data-before', before )
    .attr('data-after', after );

и CSS код должен быть таким:

.onoffswitch-inner:before {
    content:  attr(data-before);
    padding-left: 10px;
    background-color: #65AFF5; color: #FFFFFF;
}
.onoffswitch-inner:after {
    content:  attr(data-after);
    padding-right: 10px;
    background-color: #EEEEEE; color: #999999;
    text-align: right;
}
 GerA
GerA
Редактировал ответ 20-го февраля 2019 в 12:10
-2
0
Похожие сообщества 14
JavaScript Jobs — чат
JavaScript Jobs — чат
26 291 пользователей
JavaScript Jobs — чат для поиска работы и людей Правила оформления: @telegram-ru/r1WQe5F1m" rel="nofollow noopener noreferrer" class="text-blue hover:text-black link" target="_blank">https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru
Открыть telegram
JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
9 470 пользователей
Помогаем друг другу разбираться с JS Правила: @js_noobs_ru/rules" rel="nofollow noopener noreferrer" class="text-blue hover:text-black link" target="_blank">https://teletype.in/@js_noobs_ru/rules Другие полезные чаты — https://github.com/goq/telegram-list или https://rudevs.network/ByKT2JwWQ
Открыть telegram
JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
7 714 пользователей
Рекомендуем сразу отключить уведомления Правила: https://git.io/JycBd См. также: @js_noobs_ru, @nodejs_ru, @ts_cool, @react_js, @electron_cool Вакансии и поиск работы: @javascript_jobs
Открыть telegram
JavaScript.Ninja
JavaScript.Ninja
3 822 пользователей
Правила поведения проекта https://telegra.ph/Kodeks-povedeniya-proekta-JavaScriptNinja-12-15
Открыть telegram
pro.js
pro.js
3 721 пользователей
Сообщество веб (и javascript) разработчиков Чат для начинающих: @js_lib ⚠️ Вакансии - раз в неделю с вилкой зп ⚠️ Оффтоп -> @flood ❌Переход на личности ❌Троллинг ❌Реклама ❌Варез По всем вопросам: @igorz Зам: @slavik4
Открыть telegram
Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
2 919 пользователей
Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Библиотека верстальщика: @weblibrary Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @bigmarketolog Автор: @M_Boroda
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 5 дней назад
2
Денис Васьков
Зарегистрирован 1 неделю назад
3
Dima Patrushev
Зарегистрирован 1 неделю назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
JA
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией