Скрыть DIV, когда значение равно null или пусто

Из классического приложения ASP .NET я передаю набор значений на загрузочную веб-страницу. На этой веб-странице я показываю данные в элементах <div>:

<div class = "row">
  <div class = "col"><strong>Address</strong>:</div>
  <div class = "col-3">Beverly Hills 90210</div>
  <div class = "col"><strong>Phone</strong>:</div>
  <div class = "col-7">+1 1 11111111</div>
</div>

Идея состоит в том, чтобы скрыть эти поля (включая их метки), когда содержимое пусто.

Я могу сделать это через .NET, конечно, но мне было интересно, смогу ли я сделать это в JavaScript? Данные загружаются через .NET, но отображение должно выполняться сгенерированной HTML-страницей, по крайней мере, я бы так предпочел...

не отображать ничего в пустом div?

Shubh 07.05.2019 10:25

Вы хотите, чтобы div выглядел пустым, когда div пуст?

Jack Bashford 07.05.2019 10:27

Вы можете сделать это из JavaScript, но рекомендуется даже не отображать эти

golddragon007 07.05.2019 10:27

В чем ваша проблема на самом деле, скрыть div с помощью js очень просто, но когда сработает обратная передача asp.net, вам придется запустить js gen. у вас проблемы с asp.net и js или это действительно просто скрыть

Alen.Toma 07.05.2019 10:36

Идея заключалась бы в том, чтобы скрыть пустой div и связанную с ним метку. Итак, предположим, что значение телефона пусто, оно должно выглядеть так: <div class = "row"> <div class = "col"><strong>Address</strong>:</div> <div class = "col- 3">Беверли-Хиллз 90210</div> </div>

A Wandering Developer 07.05.2019 10:41
Поведение ключевого слова "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
5
1 604
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вот простой скрипт, который вы можете сделать:

var divs = document.querySelectorAll('.row > div');
divs.forEach(function(element) {
   var text = element.textContent;
   if (text === '') {
    element.style.display = 'none';
   }
});
<div class = "row">
  <div class = "col"><strong>Address</strong>:</div>
  <div class = "col-3">Beverly Hills 90210</div>
  <div class = "col"><strong>Phone</strong>:</div>
  <div class = "col-7"></div>
</div>
div:empty { display: none }

Гораздо более чистый подход — просто использовать CSS. Приведенный выше стиль скроет пустые элементы div.

The :empty selector matches every element that has no children (including text nodes).

Избегайте использования JS, если CSS помогает!

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

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

let empty = document.querySelectorAll('.row > div');

empty.forEach(function(element) {

  if (element.textContent === '') {
    element.previousElementSibling.style.display = 'none';
    element.style.display = 'none';
  }
});
<div class = "row">
  <div class = "col"><strong>Address</strong></div>
  <div class = "col-3">Beverly Hills 90210</div>
  <div class = "col"><strong>Phone</strong>:</div>
  <div class = "col-7">+1 1 11111111</div>
  <div class = "col"><strong>Email</strong>:</div>
  <div class = "col-8"></div>
</div>

Кажется, это помогает. Но как я могу заставить его работать на всей веб-странице?

A Wandering Developer 07.05.2019 12:08

:) Шутя! если не просто поместите javascript в тег '<script></script>' вашей веб-страницы!

Mobarak Ali 07.05.2019 12:15

Пришлось немного повозиться, но в конце концов я нашел решение. Мне нужно было немного изменить ответ Али, чтобы он заработал, но в конце концов...

<script>
  let empty = document.querySelectorAll('.row > div');

  // Debug
  console.info("Code was run.")

  empty.forEach(function(element) {
    if (element.textContent === '') {
      element.previousElementSibling.style.visibility = 'hidden';
      element.style.visibility = 'hidden';
    }
  });
</script>

Установка .style.display = 'none' привела к смещению некоторых элементов вправо, что испортило макет страницы. Установив .style.visibility = 'hidden', я получил желаемый эффект.

Я реализовал код, и он работает, но...

Сайт многоязычный, поэтому все может отображаться на 8 языках, поэтому тестер попробовал следующее:

  • Войти на языке 1. Выполнить новый код
  • Вернуться на главную страницу
  • Измените язык и повторите код.

В некоторых языках я все еще получаю div с пустыми значениями. Я отладил и обнаружил, что element.previousElementSibling равен нулевой.

Мне удалось это исправить, добавив тест на указанное нулевое значение:

if (element.previousElementSibling != null) {
   element.previousElementSibling.style.display = 'none';
}

С этим код снова работает, но... почему element.previousElementSibling внезапно становится нулевым? Единственная разница заключается в тексте, загруженном в метки, и они не содержат каких-либо странных символов для языков, на которых я получаю проблему.

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