Как добавить новый класс только в первый DIV в этой структуре JS

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

вы можете проверить эти строки с помощью копирования/вставки и вставить в это текстовое поле:

Вопрос-1: Цвет неба...?

Вопрос-2: Бумага поступает из...?

Вопрос-3: Сколько часов в сутках?

Вопрос-4: Жираф - это рыба?

Но теперь мне нужно, чтобы я хотел добавить один дополнительный класс answer только в первую строку, например:

Код моего текстового поля All JS таков:

const sendButton = document.getElementById('send-btn');
const textArea = document.getElementById('input');
const innerDiv = document.getElementById('inner');
var message = textArea.value;

sendButton.addEventListener('click', function() {
  // split the textarea entries into an array
  let lines = (textArea.value).split("\n");

  // iterate over each line, creating a div/span and inserting into the DOM
  lines.forEach( (line) => {
    let encodedLine = encodeHtmlEntity(line);
    let newElement = `<div class = "quiz">${encodedLine}</div>`;
    
    innerDiv.innerHTML += newElement;
  });
  
  // reset the textarea
  textArea.value = '';

});

function encodeHtmlEntity(input) {
  var output = input.replace(/[\u00A0-\u9999<>\&]/gim, function(i) {
    return '&#' + i.charCodeAt(0) + ';';
  });

  return output;
}
<div id = "inner"> </div>


<textarea class = "input" id = "input" placeholder = "Message..."></textarea>
<button class = "waves-effect waves-light" id = "send-btn">add text</button>

Как мне это сделать. пожалуйста, решите мою проблему. Какие дополнительные строки кода мне нужно написать?

Заранее спасибо, люблю тебя.

действительно очень хороший вопрос.

Rakesh Suthar 15.12.2020 15:24

Второй параметр, предоставленный функции обратного вызова forEach, — это индекс текущего элемента, поэтому с ним вы легко сможете обрабатывать этот первый элемент по-другому.

CBroe 15.12.2020 15:29
Поведение ключевого слова "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) для оценки ваших знаний,...
2
2
202
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

sendButton.addEventListener('click', function() {
  // split the textarea entries into an array
  let lines = (textArea.value).split("\n");

  // iterate over each line, creating a div/span and inserting into the DOM
  lines.forEach( (line,i) => {
    let encodedLine = encodeHtmlEntity(line);
    let newElement = i===0 ? 
    `<div class = "quiz answer">${encodedLine}</div>` :
    `<div class = "quiz">${encodedLine}</div>`
    
    innerDiv.innerHTML += newElement;
  });
  
  // reset the textarea
  textArea.value = '';

});

Если вы уверены, что всегда будет хотя бы один элемент класса «викторина»:

document.getElementsByClassName('quiz')[0].classList.add('answer')

[0] представляет первый элемент с классом «викторина».


Примечание: если элемента класса «викторина» вообще нет, то:

document.getElementsByClassName('quiz')[0] === undefined

будет истинным, и строка выдаст такую ​​ошибку:

Cannot read property 'classList' of undefined

Я думаю, что ОП хочет добавить класс непосредственно во время создания элементов div. Предлагаемое вами решение работает для элементов, которые уже присутствуют в DOM.

secan 15.12.2020 16:35

Аааа, возможно, я неправильно истолковал вопрос, извините. Я понял, что нужно было «как добавить» класс к элементу, а не как родить его с обоими классами. Спасибо

cape_bsas 15.12.2020 16:56

Вы можете сделать что-то вроде этого:

  // iterate over each line, creating a div/span and inserting into the DOM
  lines.forEach( (line, index) => {
    let encodedLine = encodeHtmlEntity(line);

    let classList = 'quiz';
    if (index === 0) {
      classList += ' answer'
    }

    let newElement = `<div class = "${classList}">${encodedLine}</div>`;
    
    innerDiv.innerHTML += newElement;
  });
if (document.getElementsByClassName('classYouNeedToFind')[0]) {
    document.getElementsByClassName('classYouNeedToFind')[0].classList.add('classYouNeedToAdd');
}

Если только чтобы избежать ошибок, если нет элемента с классом. И в jQuery

$('.classYouNeedToFind').eq(0).addClass('classYouNeedToAdd');

Нет, если это необходимо в jQuery.

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