Есть ли способ получить из DOM разные значения параметра?

Я пытаюсь создать способ добавления разных статей из раскрывающегося списка и добавления его в таблицу внизу. Результат, который мне нужен, похож на этот (продукт - книга): Количество - Название - Цена/единица - Общая цена Так как значение опции в форме такое: <%= book.title%> <%= book.price %> Я не могу взять цену саму по себе и поставить в другой столбец например.

Я пытался создать несколько значений для одного параметра, и, очевидно, это не сработало.

Код формы

<label for = "book">Livres:</label>
<select id = "books-list">
  <option value = ""></option>
  <% @books.each do |book| %>
    <option value = "<%= book.title %> -- <%= book.price %> dt"><%= book.title %> | <%= book.author %> </option>
  <% end %>
</select>

Javascript-код:

const addBookToList = () => {
  const booksList = document.querySelector('#books-list');

  if (booksList) {
    booksList.addEventListener("click", () => {
      const book = booksList.value
      if (book != "")
        booksList.insertAdjacentHTML('afterend', `<br/>${book}`)
      });
    };
  }

export { addBookToList };

Мне нужно, чтобы результат был чем-то вроде таблицы с каждым элементом «книга» в столбце:

Quantity - Title        - Price/unit - Total Price
01       - Book title 1 - 152€       - 152€

Спасибо за помощь.

Создайте массив, содержащий все книги, и присвойте им идентификатор. Затем поместите этот идентификатор в качестве значения параметра. Таким образом, вы можете добавлять столько свойств к своим книгам, сколько хотите, без необходимости изменять HTML или втискивать все о книге в атрибуты HTML. Не используйте HTML в качестве модели данных, если этого можно избежать. Затем создать таблицу так же просто, как: 1) отфильтровать массив книг, чтобы найти нужную книгу. 2) переберите все свойства книги, чтобы создать ячейку таблицы.

Shilly 10.04.2019 14:14

несколько подходов используют атрибуты data- или передают массив/хэш-карту данных в переменную javascript с помощью JSON и используют выбранное значение для поиска этих данных.

charlietfl 10.04.2019 14:15
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это самое простое решение, у вас есть атрибут данных, который содержит значения, разделенные двойной точкой с запятой. Вы разделите его, и вы получите реальные данные. Вы также можете использовать для этого JSON (не уверен насчет &quot; и " в атрибуте html).

document.querySelector('#books-list').addEventListener('change', function(e) {
  const option = e.target.selectedOptions[0];
  if (option) {
    const value = option.dataset.value;
    if (value) {
      console.info(value.split(';;'));
    }
  }
});
<select id = "books-list">
  <option value = ""></option>
  <option data-value = "foo;;bar;;baz">foo bar baz</option>
  <option data-value = "lorem;;ipsum;;dolor">lorem ipsum dolor</option>
</select>

В вашем случае вы можете просто split(' -- '); получить значения, а затем создать строку таблицы (tr) с данными (если booksList является таблицей).

Другие вопросы по теме

Похожие вопросы

Momentjs: как преобразовать дату/время одного часового пояса в дату/время UTC
Обнаружение ошибки core.js: 15723 ERROR TypeError: невозможно прочитать свойство toLowerCase неопределенного значения в Angular 7
Как получить работающий таймер обратного отсчета с кнопкой, добавляющей +1 к счетчику после каждого нажатия
Функция vb.net JS, определенная в голове, не определена в onLoad
С# строка datetime utc и z при использовании в javascript
UnhandledPromiseRejectionWarning: отклонение необработанного обещания (идентификатор отклонения: 1): ReferenceError: RegistrationTokens не определен
Деструктуризация API https://randomuser.me/api/ для захвата заголовка, фамилии и имени, а также большой фотографии профиля пользователя, возвращаемого API
Как предотвратить исчезновение модального окна при блокировке экрана на Android?
Как вызвать событие onCheck для дочерних узлов в Kendo TreeView, когда родитель проверен
Вернуть код местной валюты в соответствии с часовым поясом пользователя