Показати / приховати "div" за допомогою JavaScript


185

Для веб-сайту, який я роблю, я хочу завантажити один div, а приховати інший, а потім мати дві кнопки, які дозволять перемикати види між ділом за допомогою JavaScript.

Це мій поточний код

function replaceContentInContainer(target, source) {
  document.getElementById(target).innerHTML = document.getElementById(source).innerHTML;
}

function replaceContentInOtherContainer(replace_target, source) {
  document.getElementById(replace_target).innerHTML = document.getElementById(source).innerHTML;
}
<html>
<button onClick="replaceContentInContainer('target', 'replace_target')">View Portfolio</button>
<button onClick="replaceContentInOtherContainer('replace_target', 'target')">View Results</button>

<div>
  <span id="target">div1</span>
</div>

<div style="display:none">
  <span id="replace_target">div2</span>
</div>

Друга функція, яка замінює div2, не працює, але перша є.

Відповіді:


429

Як показати або приховати елемент:

Щоб показати або приховати елемент, маніпулюйте властивістю стилю елемента . У більшості випадків ви, мабуть, просто хочете змінити displayвластивість елемента :

element.style.display = 'none';           // Hide
element.style.display = 'block';          // Show
element.style.display = 'inline';         // Show
element.style.display = 'inline-block';   // Show

Крім того, якщо ви все-таки хочете, щоб елемент займав простір (наприклад, якщо ви ховали комірку таблиці), замість цього можна змінити visibilityвластивість елемента :

element.style.visibility = 'hidden';      // Hide
element.style.visibility = 'visible';     // Show

Приховування колекції елементів:

Якщо ви хочете приховати колекцію елементів, просто повторіть кожен елемент і змініть його displayна none:

function hide (elements) {
  elements = elements.length ? elements : [elements];
  for (var index = 0; index < elements.length; index++) {
    elements[index].style.display = 'none';
  }
}
// Usage:
hide(document.querySelectorAll('.target'));
hide(document.querySelector('.target'));
hide(document.getElementById('target'));

Показана колекція елементів:

Більшу частину часу, ймовірно, ви будете просто перемикатися між display: noneі display: block, а це означає, що наступне може бути достатньо для показу колекції елементів.

Ви можете необов'язково вказати бажане displayяк другий аргумент, якщо ви не хочете, щоб це було за замовчуванням block.

function show (elements, specifiedDisplay) {
  elements = elements.length ? elements : [elements];
  for (var index = 0; index < elements.length; index++) {
    elements[index].style.display = specifiedDisplay || 'block';
  }
}
// Usage:
var elements = document.querySelectorAll('.target');
show(elements);

show(elements, 'inline-block'); // The second param allows you to specify a display value

Крім того, кращим підходом до показу елементів (ив) було б просто видалити вбудований displayстиль, щоб повернути його до початкового стану. Потім перевірте обчислений displayстиль елемента, щоб визначити, чи він прихований каскадним правилом. Якщо так, то покажіть елемент.

function show (elements, specifiedDisplay) {
  var computedDisplay, element, index;

  elements = elements.length ? elements : [elements];
  for (index = 0; index < elements.length; index++) {
    element = elements[index];

    // Remove the element's inline display styling
    element.style.display = '';
    computedDisplay = window.getComputedStyle(element, null).getPropertyValue('display');

    if (computedDisplay === 'none') {
        element.style.display = specifiedDisplay || 'block';
    }
  }
}

(Якщо ви хочете зробити це на крок далі, ви можете навіть імітувати те, що робить jQuery, і визначити стилізацію браузера за замовчуванням елемента, додавши елемент до порожнього iframe(без суперечливої ​​таблиці стилів), а потім відновіть обчислюваний стиль. дізнається справжнє початкове displayзначення властивості елемента, і вам не доведеться жорстко кодувати значення, щоб отримати бажані результати.)

Увімкнення дисплея:

Аналогічно, якщо ви хочете переключити displayелемент або колекцію елементів, ви можете просто перебрати один елемент і визначити, чи він видимий, перевіривши обчислене значення displayвластивості. Якщо це видно, встановити displayв noneіншому випадку видалити вбудований displayстиль, і якщо вона по - , як і раніше прихована, встановіть displayдля вказаного значення або закодованого замовчуванням block.

function toggle (elements, specifiedDisplay) {
  var element, index;

  elements = elements.length ? elements : [elements];
  for (index = 0; index < elements.length; index++) {
    element = elements[index];

    if (isElementHidden(element)) {
      element.style.display = '';

      // If the element is still hidden after removing the inline display
      if (isElementHidden(element)) {
        element.style.display = specifiedDisplay || 'block';
      }
    } else {
      element.style.display = 'none';
    }
  }
  function isElementHidden (element) {
    return window.getComputedStyle(element, null).getPropertyValue('display') === 'none';
  }
}
// Usage:
document.getElementById('toggle-button').addEventListener('click', function () {
  toggle(document.querySelectorAll('.target'));
});


97

Ви також можете використовувати рамку JavaScript jQuery :

Сховати Div Block

$(".divIDClass").hide();

Щоб показати Div Block

$(".divIDClass").show();

17
Питання не згадує про використання jQuery
MLeFevre

53
що не є підставою для заборони. у запитанні конкретно не сказано, що не використовувати jquery, і крім інших людей, які приходять сюди, щоб переглянути відповіді, можливо, не буде таких самих обмежень, що і ОП.
Кінджал Діксіт

5
@KinjalDixit Якщо IMRUP хоче додати зауваження, що у його відповіді не використовується ванільний JS і замість цього покладається на jQuery, то це матиме певну заслугу, хоча оригінальне питання не позначене jQuery / навіть згадує jQuery. Оскільки він наразі стоїть, це відповідь за допомогою бібліотеки, не зазначаючи, що це робиться, мало (хоча це, мабуть, все, що потрібно) пояснення, і заплутане використання селектора (використовуючи селектор класів під час зазначення ідентифікатора ?). Як це зараз є, я не вважаю корисною відповідь на це питання.
MLeFevre

3
Додаючи приклад jQuery (що є абсолютно вірним підходом до IMHO), будь ласка, надайте приклад ванільного JS для порівняння та поясніть ОП різницю. Тому багато нових розробників сьогодні вважають, що jQuery - це JavaScript. Трохи освіта допоможе їм зробити правильний вибір.
Марк Купер

Я вважаю, що ця відповідь була дуже корисною і пов’язана з питанням.
mfnx

44

Ви можете просто маніпулювати стилем діва, про який йде мова ...

document.getElementById('target').style.display = 'none';

Але я хотів би, щоб він також відображав вміст другого дива
Джейк Олс

20

Ви можете приховати / показати Div за допомогою функції Js. зразок нижче

<script>
    function showDivAttid(){

        if(Your Condition) {

            document.getElementById("attid").style.display = 'inline';
        }
        else
        {
            document.getElementById("attid").style.display = 'none';
        }
    }

</script>

HTML -

<div  id="attid" style="display:none;">Show/Hide this text</div>

якщо ви хочете використовувати ім'я класу замість Id, використовуйте подібно document.getElementsByClassName ('CLASSNAME') [0] .style.display = 'none';
Vishwa

14

Використовуючи стиль:

<style type="text/css">
   .hidden {
        display: none;
   {
   .visible {
        display: block;
   }
</style>

Використання обробника подій у JavaScript краще, ніж onclick=""атрибут у HTML:

<button id="RenderPortfolio_Btn">View Portfolio</button>
<button id="RenderResults_Btn">View Results</button>

<div class="visible" id="portfolio">
    <span>div1</span>
</div>

<div class"hidden" id="results">
    <span>div2</span>
</div>

JavaScript:

<script type="text/javascript">

    var portfolioDiv = document.getElementById('portfolio');
    var resultsDiv = document.getElementById('results');

    var portfolioBtn = document.getElementById('RenderPortfolio_Btn');
    var resultsBtn = document.getElementById('RenderResults_Btn');

    portfolioBtn.onclick = function() {
        resultsDiv.setAttribute('class', 'hidden');
        portfolioDiv.setAttribute('class', 'visible');
    };

    resultsBtn.onclick = function() {
        portfolioDiv.setAttribute('class', 'hidden');
        resultsDiv.setAttribute('class', 'visible');
    };

</script>

jQuery може допомогти вам легко маніпулювати елементами DOM!


Ви можете спробувати hiddenатрибут HTML5
bobobobo

12

Я знайшов цей звичайний код JavaScript дуже зручним!

#<script type="text/javascript">
    function toggle_visibility(id) 
    {
        var e = document.getElementById(id);
        if ( e.style.display == 'block' )
            e.style.display = 'none';
        else
            e.style.display = 'block';
    }
</script>

5

Встановіть свій HTML як

<div id="body" hidden="">
 <h1>Numbers</h1>
 </div>
 <div id="body1" hidden="hidden">
 Body 1
 </div>

А тепер встановіть javascript як

function changeDiv()
  {
  document.getElementById('body').hidden = "hidden"; // hide body div tag
  document.getElementById('body1').hidden = ""; // show body1 div tag
  document.getElementById('body1').innerHTML = "If you can see this, JavaScript function worked"; 
  // display text if JavaScript worked
   }

1
<script type="text/javascript">
    function hide(){
        document.getElementById('id').hidden = true;
    }
    function show(){
        document.getElementById('id').hidden = false;
    }
</script>

Використання прихованої для такої проблеми, мабуть, не є гарною ідеєю - окрім того, що не підтримується у версіях IE до 11, плакат ефективно намагається зробити щось еквівалентне простому інтерфейсу вкладки, і тому елементи не будуть приховані в всі контексти. У такій ситуації, мабуть, краще використовувати "дисплей", щоб контролювати приховування - див. Stackoverflow.com/questions/6708247/…
Джон - Не номер

1

Просто простий Встановіть атрибут стилю ID:

Щоб показати прихований діл

<div id="xyz" style="display:none">
     ...............
</div>
//In JavaScript

document.getElementById('xyz').style.display ='block';  // to hide

Щоб приховати показаний діл

<div id="xyz">
     ...............
</div>
//In JavaScript

document.getElementById('xyz').style.display ='none';  // to display

0

І відповідь Purescript для людей, які використовують галоген:

import CSS (display, displayNone)
import Halogen.HTML as HH
import Halogen.HTML.CSS as CSS

render state = 
  HH.div [ CSS.style $ display displayNone ] [ HH.text "Hi there!" ]

Якщо "оглянути елемент", ви побачите щось на зразок:

<div style="display: none">Hi there!</div>

але насправді нічого не відображатиметься на екрані, як очікувалося.


0

Просто проста функція Потрібно реалізувати Показати / приховати "div" за допомогою JavaScript

<a id="morelink" class="link-more" style="font-weight: bold; display: block;" onclick="this.style.display='none'; document.getElementById('states').style.display='block'; return false;">READ MORE</a>


<div id="states" style="display: block; line-height: 1.6em;">
 text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here  
    <a class="link-less" style="font-weight: bold;" onclick="document.getElementById('morelink').style.display='inline-block'; document.getElementById('states').style.display='none'; return false;">LESS INFORMATION</a>
    </div>

0

Я знайшов це питання, і нещодавно я реалізував деякі користувальницькі інтерфейси за допомогою Vue.js, тому це може бути хорошою альтернативою.

По-перше, ваш код не приховується, targetколи ви натискаєте Переглянути профіль. Ви підміняють зміст targetз div2.

let multiple = new Vue({
  el: "#multiple",
  data: {
    items: [{
        id: 0,
        name: 'View Profile',
        desc: 'Show profile',
        show: false,
      },
      {
        id: 1,
        name: 'View Results',
        desc: 'Show results',
        show: false,
      },
    ],
    selected: '',
    shown: false,
  },
  methods: {
    showItem: function(item) {
      if (this.selected && this.selected.id === item.id) {
        item.show = item.show && this.shown ? false : !item.show;
      } else {
        item.show = (this.selected.show || !item.show) && this.shown ? true : !this.shown;
      }
      this.shown = item.show;
      this.selected = item;
    },
  },
});
<div id="multiple">
  <button type="button" v-for="item in items" v-on:click="showItem(item)">{{item.name}}</button>

  <div class="" v-if="shown">: {{selected.desc}}</div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.7/vue.js"></script>


0

Ви можете легко досягти цього за допомогою jQuery .toggle () .

$("#btnDisplay").click(function() {
  $("#div1").toggle();
  $("#div2").toggle();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="div1">
  First Div
</div>
<div id="div2" style="display: none;">
  Second Div
</div>
<button id="btnDisplay">Display</button>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.