Как динамически добавить значок font awesome из файла JS?

#javascript #dom #font-awesome

#javascript #dom #шрифт-awesome

Вопрос:

Я пытаюсь добавить значки font awesome в свою функцию приветствия, чтобы в каждом заголовке приветствия был прикреплен другой значок font awesome.

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

 Good Morning<i class="fas fa-sun"></i> 

```javascript
function goodSomething() {

  let today = new Date();
  let curHr = today.getHours();

  if (curHr < 12) {
    document.getElementById('greetings').innerText = "Good Morning"   '<i class="fas fa-sun"></i>';
  } else if (curHr < 18) {
    document.getElementById('greetings').innerText = "Good Afternoon"   '<i class="fas fa-coffee"></i>';
  } else {
    document.getElementById('greetings').innerText = "Good Evening"   '<i class="fas fa-moon"></i>';
  }
};
 

Я ожидаю, что вывод:

доброе утро (значок солнца)

добрый день (значок кофе)

добрый вечер (значок луны)

Ответ №1:

Вы должны использовать innerHTML вместо innerText того, чтобы изменять html, а не текст элемента.

 <i class="fas fa-sun"></i>  //This is string representing html
 

Ниже приведены два фрагмента, которые покажут разницу

Нерабочий код

 document.getElementById("test").innerText = `<i class="fas fa-sun">` 
 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ 1lW4y57PTFmhCaXp0ML5d60M1M7uH2 nqUivzIebhndOJK28anvf" crossorigin="anonymous">


<div id="test"></div> 

Рабочий код

 document.getElementById("test").innerHTML = `<i class="fas fa-sun">` 
 <div id="test"></div>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ 1lW4y57PTFmhCaXp0ML5d60M1M7uH2 nqUivzIebhndOJK28anvf" crossorigin="anonymous"> 

Также вы можете сделать его более чистым и динамичным, используя массив объектов.

 function goodSomething() {
  let curHr = new Date().getHours();
  const conds = [
        {cond:curHr < 12, icon:"sun", time:"Morning"},
        {cond:curHr < 18, icon:"coffee", time:"Afternoon"},
        {cond:true, icon:"moon", time:"Evening"}
  ]
  let {time,icon} = conds.find(x => x.cond);
  document.getElementById('greetings').innerHTML = `Good ${time} <i class="fas fa-${icon}"></i>`
  
};
 

Комментарии:

1. @MaheerAli Я полагаю, что это может быть связано с первой версией вашего ответа, но кто знает…

2. @Shidersz может быть, но теперь он сильно обновлен. Я думаю, что downvoter поддержал ваш комментарий.