Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 13.11.2020, 23:18
Кандидат Javascript-наук
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 130

Пожалуйста, а можно еще спросить на схожую тему...

Хочу поместить в виде фоновой картинки (background-image) такую картинку, которая лежит в JS переменной.

В виде ссылки получается:

document.getElementById("canvas1").style.backgroundImage="url('imgs/m3.png')";

а с переменной - нет:

document.getElementById("canvas2").style.backgroundImage="${pic_m3}";


Обратные кавычки вместо двойных тоже пробовал - не помогает. Пример лежит по адресу: http://www.elegant-nmr.com/iii/m.html

Пожалуйста, подскажите, какие теперь я кавычки и где забыл?

Спасибо!

Последний раз редактировалось Was-Ja, 13.11.2020 в 23:35.
Ответить с цитированием
  #12 (permalink)  
Старый 13.11.2020, 23:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Was-Ja,
document.getElementById("canvas2").style.backgroundImage=`url('${pic_m3}')`;
Ответить с цитированием
  #13 (permalink)  
Старый 13.11.2020, 23:51
Кандидат Javascript-наук
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 130

Ой!!! Как просто-то!!!

СПАСИБО ОГРОМНОЕ!!!

Последний раз редактировалось Was-Ja, 13.11.2020 в 23:54.
Ответить с цитированием
  #14 (permalink)  
Старый 15.11.2020, 13:19
Кандидат Javascript-наук
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 130

И еще на эту тему, пожалуйста, посоветуйте:

в html у меня куча простых групп полей:
короткое название - подсказка - input для ввода,
я обычно их помещаю в элемент таблицы, получается так:
<td>Experiment Name:</td><td><img width=15 length=15 id="h3" title="It is good idea to provide a name of an experiment here, it will simplify your further search"/></td>
<td><input type="text" class="css_mf" style="width:260px" id="experiment_name" placeholder="My first experiment today"></td>


мне хочется все тексты вынести в какую-то структуру, то есть например
var H = {};
H.DS = {}; // DS - аббревиатура секции
H.DS.EN = {}; // EN - аббревиатура конкретного поля
H.DS.EN.L = "Experiment Name";
H.DS.EN.H = "It is good idea to provide a name of an experiment here, it will simplify your further search";
H.DS.EN.PH = "My first experiment today";


Мне это хочется сделать, чтобы меняя H можно было бы изменить язык.

Я понимаю как в JS заполнить эти поля после того, как все объекты уже появились в html, но тогда код будет нечитаемый.

Скажите, пожалуйста, а можно ли как-то так написать, чтобы встроить каждый такой текстовый элемент (лежащий в JS объекте) в httml, то есть хочется чего-то похожего на:

<td>${H.DS.EN.L}</td><td><img width=15 length=15 id="h3" title=${H.DS.EN.H}/></td>
<td><input type="text" class="css_mf" style="width:260px" id="experiment_name" placeholder=${H.DS.EN.PH}></td>


Спасибо!
Ответить с цитированием
  #15 (permalink)  
Старый 15.11.2020, 14:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от Was-Ja
можно было бы изменить язык.
на всякий случай ... https://javascript.ru/forum/showthre...076#post509074
Ответить с цитированием
  #16 (permalink)  
Старый 17.11.2020, 22:19
Кандидат Javascript-наук
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 130

Спасибо большое!!! Пока забил, и реализовал через innerHTML и аналогичное
Ответить с цитированием
  #17 (permalink)  
Старый 26.01.2021, 01:50
Кандидат Javascript-наук
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 130

Вопрос вдогонку...

Скажите, пожалуйста, а как поместить картинку, которая есть в JS переменной внутрь css?

То есть у меня есть

<script>
var pic_b = [];
pic_b[0]="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAB6CAYAAAClS5OpAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAGpJREFUaN7t2rENwDAIAEFIw8heHolMYKqku5foELcAOTNxq7uju2MrM6Oq7gszc51zTkTEbFNVs9144ucAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODfcnvs/qIXQqxBMul12GcAAAAASUVORK5CYII=";
</script>


и есть CSS:

</style>
.css_l { border-radius: 14px; border: 2px solid black; color: black; padding: 2px 2px; text-align: center; vertical-align: center; font-size: 14px; margin: 5px 5px; cursor: pointer; }
/* .css_l:focus { outline: none; } */
.css_l::before { content: attr(name); }
.css_l[value='0']::after { content: `url('${pic_p[0]}')`; margin: 1px; } /*  мне хочется сюда нарисовать картинку, что я выше сохранил в JS переменной */
.css_l[value='1']::after { margin: 2px; }
.css_l[value='2']::after { margin: 6px; }
</style>


Поправьте, пожалуйста, что я тут делаю не так!

Спасибо!
Ответить с цитированием
  #18 (permalink)  
Старый 26.01.2021, 07:36
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

Как то так
<style id='ist'>
.css_l { border-radius: 14px; border: 2px solid black; color: black; padding: 2px 2px; text-align: center; vertical-align: center; font-size: 14px; margin: 5px 5px; cursor: pointer; }
/* .css_l:focus { outline: none; } */
.css_l::before { content: attr(name); }
.css_l[value='0']::after { content: `url('${pic_p[0]}')`; margin: 1px; } /*  мне хочется сюда нарисовать картинку, что я выше сохранил в JS переменной */
.css_l[value='1']::after { margin: 2px; }
.css_l[value='2']::after { margin: 6px; }
</style>


var pic_b = [];
pic_b[0]="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAB6CAYAAAClS5OpAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAGpJREFUaN7t2rENwDAIAEFIw8heHolMYKqku5foELcAOTNxq7uju2MrM6Oq7gszc51zTkTEbFNVs9144ucAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODfcnvs/qIXQqxBMul12GcAAAAASUVORK5CYII=";

let est = document.getElementById('ist'); // Элемент style
let rules = est.sheet.cssRules; // Список правил
let rule;
for (let i = 0; i<rules.length; i++) {			// Ищем правило с нужным селектором
	if (rules[i].selectorText == ".css_l[value='0']::after") {
		rule = rules[i]; break;
	}
}
rule.style.setProperty('content', `url('${pic_p[0]}')`);  //  Задаем нужное свойство
Ответить с цитированием
  #19 (permalink)  
Старый 26.01.2021, 10:11
Кандидат Javascript-наук
Отправить личное сообщение для Was-Ja Посмотреть профиль Найти все сообщения от Was-Ja
 
Регистрация: 20.09.2020
Сообщений: 130

Огромное спасибо, voraa за классное решение!!!

Не думал, что придется так заумно в css заехать, заодно теперь я понимаю, что с css можно делать все, что и с обычными элементами.

Дополнительно обнаружил, что

if (rules[i].selectorText == ".css_l[value='0']::after")


не во всех браузерах работает, но

if (rules[i].selectorText == ".css_l[value=\"0\"]::after")


работает вроде везде.

Еще есть одна хотелка, думал сам осилю, но так пока и не смог... Теперь хочется эту картинку уменьшить - отскалировать. Пробовал добавить

rule.style.setProperty('width', "20%");


но ничего не изменилось.

Пожалуйста, посоветуйте, можно ли как-то встраиваемую картинку отскалировать (она у меня 122 пикселей в высоту, а хочется, например, 24 пикселя или 20%).

Спасибо!
Ответить с цитированием
  #20 (permalink)  
Старый 26.01.2021, 12:04
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Сообщение от voraa
for (let i = 0; i<rules.length; i++) {           // Ищем правило с нужным селектором
    if (rules[i].selectorText == ".css_l[value='0']::after") {
        rule = rules[i]; break;
    }
}
в общем виде, рули могут быть медиазапросами, тогда у них нет selectorText, зато есть свой массив cssRules, по которому тоже надо цикл

function findRuleBySel (rules, selectorText) {
  if (!rules || !selectorText) return;
  
  for (let i = 0; i<rules.length; i++) 
    const rule = findRuleBySel(rules[i].cssRules, selectorText) || ((rules[i].selectorText === selectorText) && rules[i]);
    if (rule) {
      return rule;
    }
  }
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как поместить кнопку созданую на JS по центру АнонимныйПарень Общие вопросы Javascript 1 27.03.2017 13:42
Как получить содержимое контейнера в переменную? snovapavel jQuery 0 27.11.2016 04:56
Как выравнить содержимое JS по центру kapralpv Общие вопросы Javascript 5 03.04.2013 15:51
Как выводить на печать содержимое нужного Div-а? sarik Общие вопросы Javascript 9 04.03.2013 14:02
JS классы - как объединить функции в класс olga153b Events/DOM/Window 3 01.11.2011 14:13