Стартовая страница › Форумы › Понять, как работает ПО › Мнемосхемы › Изменения стиля в скрипте фейсплейта
- В этой теме 10 ответов, 2 участника, последнее обновление 4 часа, 51 минута назад сделано
manjey73.
-
АвторЗаписи
-
12.08.2026 в 13:25 #44468
manjey73Участник<defs id="dqs{0}"> <style> .strw { fill: none;stroke: #f00;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1 } </style> <g id="gg1{0}"> <path id="pt1{0}" class="strw" d="M 21.3 61 V 4.54" /> </g> </defs>Собственно в SVG есть стиль в defs — как найти и заменить стиль скриптом в фейсплейте ?
Для jQuery предлагается такой вариант —
$('.strw').css('stroke-width', '1'); // Возвращаем исходную толщинуНо я не очень понимаю в данном случае, как тут надо действовать с учетом args — что искать, или как менять ?
Мне было бы удобнее сделать в таком виде стиль, так как он применятся ко многим элементам, а не прописывать стили непосредственно в элементах в виде атрибутов и потом их у каждого менять.13.08.2026 в 15:27 #44496
MikhailМодераторstyle — это отдельный элемент DOM. Чтобы его изменить, нужно найти элемент, удалить и вставить новый. Но в целом, это неверный подход. Классы обычно не меняются в ходе работы.
id элемента меняется динамически. Поэтому элемент нужно искать по его классу, например,
<defs id="dqs{0}" class="myclass">…-
Ответ изменён 1 день, 3 часа назад пользователем
Mikhail.
13.08.2026 в 15:29 #44498
MikhailМодераторМожно style оставить фиксированным, а менять стили у конкретных элементов. Стиль элемента имеет более высокий приоритет.
13.08.2026 в 15:49 #44499
manjey73Участникя знаю, что стиль элемента имеет более высокий приоритет.
Вопрос в том, судя по описанию в нете, что изменить css в классе, вроде как можно, но уже в построенном DOM.
А тут как обычно, перед domUpdated происходит копирование из исходника и непонятно, сработает или нет.
Поменять в общем классе <style> удобнее, так как например задать толщину всем линиям проще в одном месте, а не писать портянки, чтобы поменять у каждого компонента.Вот в чем загвоздка…
Как найти класс в defs, учитывая, что их там будет несколько? правильный пример с учетом args.component.dom.find или как правильно?
Я всякие варианты перепробовал, лыжи не едут.13.08.2026 в 15:50 #44500
manjey73Участник$('.strw').css('stroke-width', '1');вот strw это класс в <style> внутри <defs> — как эту же строчку выполнить с учетом того, что мы передаем args ?
14.08.2026 в 10:40 #44506
MikhailМодераторкак эту же строчку выполнить с учетом того, что мы передаем args ?
Не уверен, что возможно изменить класс strw внутри элемента style, не заменив элемент style целиком. Если найдёте как это делается, расскажите.
14.08.2026 в 13:36 #44508
manjey73Участниктак я привел пример, который предлагает интернет.
Как поменять целиком тоже есть через .css()Тут вопрос как заменить вот это
$('.strw')— до класса внутри <style> как добраться , учитывая что мы передаем в виде args ????Единственное, интернет пишет, что изменения производятся уже в DOM (тут мне до сих порт непонятно поведение копирования разметки перед domUpdated)
И поменяются только существующие элементы, использующие данный класс (что собственно и надо), а новые получат стили по умолчанию…я просто не пойму как к этому подобраться, учитывая что это jQuery объект а не прямая работа с DOM
14.08.2026 в 13:40 #44509
manjey73Участник6. Часто проще изменить сами элементы, а не <style>
Если вам нужно просто перекрасить элементы с классом .circle, можно сделать так:$('#mySvg .circle').css('fill', 'red');ну и все в подобном духе…
14.08.2026 в 13:45 #44510
manjey73Участникstyle при этом может быть в корне svg или чаще всего в defs
<defs id="dqs{0}"> <style id="style{0}" > .strw { fill: none;stroke: #f0f;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1 } .s1 { fill: none;stroke: #000;stroke-linecap: round;stroke-linejoin: round;stroke-width: 5 } </style> </defs>14.08.2026 в 13:45 #44511
manjey73Участникid можно добавить хоть к defs, хоть к style, это будет работать.
И еще, если я открою консоль, и руками поменяю в стиле цвет например, он поменяется у элемента, который его использует. Значит это возможно сделать.
Осталось определить как с учетом реалий фейсплейта.
-
Ответ изменён 5 часов, 25 минут назад пользователем
manjey73.
14.08.2026 в 14:23 #44513
manjey73Участникполучилось целиком переписать <style> через .text() в скрипте.
Но это не очень хороший выход, надо все же как правильно подобраться к .css и менять конкретные стили, так как в style их может быть много, переписывать каждый раз некрасиво.Для создания (точнее перезаписи) получилось так
var newCss = '.strw { fill: none; stroke: #f0f; stroke-linecap: round; ' + 'stroke-linejoin: round; stroke-width: 3; }'; args.component.dom.find(<code>#dqs${idPrefix}</code>).find("style").text(newCss);а надо желательно искать классы внутри style и использовать .css() в модификациях
-
Ответ изменён 1 день, 3 часа назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.