Как получить текстовое значение из таблицы в js

У меня есть таблица доступных номеров в отеле, и я хочу сделать текст зеленым, если он доступен. Можно ли проверить innerHTML td, чтобы увидеть, написано ли оно «доступно»?

var status = document.querySelectorAll("td");
if (status.innerHTML === "available") {
  classList.add("available-green");
}
.available-green {
  color: green;
}
<table>
  <tr>
    <td>booked</td>
    <td>available</td>
    <td>available</td>
    <td>booked</td>
  </tr>
</table>
Поведение ключевого слова "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
0
585
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Свойство textContent интерфейса Node представляет текстовое содержимое узла и его потомков.

var Status = document.querySelectorAll("td");
Status.forEach(function(el) {
  if (el.textContent === "available") {
    el.classList.add("available-green");
  }
});
.available-green {
  color: green;
}
<table>
  <tr>
    <td>booked</td>
    <td>available</td>
    <td>available</td>
    <td>booked</td>
  </tr>
</table>

я получил это сообщение об ошибке, когда попытался добавить его в свой код: «TypeError: status.forEach не является функцией».

Aadne Haaland 07.04.2019 16:15

@AadneHaaland status и Status разные переменные. Попробуйте Status, когда вы установите его.

BOZ 07.04.2019 16:17

Прочтите документы на МДН

var statuses = document.querySelectorAll("td");
statuses.forEach(status => {
  if (status.innerHTML === "available") {
   status.classList.add("available-green");
  }
})
.available-green {
  color: green;
}
<table>
  <tr>
    <td>booked</td>
    <td>available</td>
    <td>available</td>
    <td>booked</td>
  </tr>
</table>
Ответ принят как подходящий

У вас есть несколько проблем:

  1. document.querySelectorAll вернет коллекцию NodeList, так как вы можете получить много элементов при запросе тега <td>. Таким образом, когда вы получаете несколько элементов, вы можете вместо этого перебирать каждый элемент в NodeList, используя .forEach.

  2. В настоящее время вы ничего не получаете .classList, поэтому выполнение classList.add("available-green"); не даст результатов. Вместо этого при использовании цикла forEach вы можете вместо этого использовать текущий элемент (первый параметр метода .forEach) в качестве элемента для изменения списка классов.

  3. status — это предопределенная переменная, которая является частью window, и обычно рекомендуется не использовать ее, поскольку это может привести к неожиданному поведению.

  4. Хотя это и не требуется, обычно не считается хорошей практикой использовать .innerHTML, если вы не извлекаете HTML из вашего элемента. Вместо этого вы можете использовать .textContent, когда просто получаете текст.

См. рабочий пример ниже:

var tableData = document.querySelectorAll("td"); // start variable names with lowercase letters & class names with upper

tableData.forEach(function(element) {
  if (element.textContent === "available") {
    element.classList.add("available-green");
  }
});
.available-green {
  color: lightgreen;
}
<table border=1>
  <tr>
    <td>booked</td>
    <td>available</td>
    <td>available</td>
    <td>booked</td>
  </tr>
</table>

querySelectorAll возвращает список узлов, с которым мы можем работать как с массивом, мы получаем массив состояния для проверки значения, которое мы должны зациклить на нем.

var Status = document.querySelectorAll("td");
    console.info(Status);
    Status.forEach(element=>{
      if (element.innerHTML === "available"){
      element.classList.add("available-green");

      }
    })
.available-green {
      color: green;
    }
<table>
  <tr>
    <td>booked</td>
    <td>available</td>
    <td>available</td>
    <td>booked</td>
  </tr>
</table>

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