Переключить несколько Div для шоу скрыть - PullRequest
0 голосов
/ 24 июля 2011

ок, у меня есть несколько div (7), которые я хочу переключить для show hide.Если один div открыт, остальные должны скрываться, а когда я открываю новый div, остальные должны скрываться.Я смог сделать это с помощью приведенного ниже фрагмента jquery

function showDivs() {
    $(".head").click(function() {
        $(".Content").hide();
        $(this).next().fadeIn("slow");

    })
}

, где .head - заголовок для каждого div, а .Content - класс для div.У меня все работает отлично, позвонив по номеру showDivs() из .head(). Теперь вопрос в том, что в левой части моей страницы я установил ul li.У меня есть 7 li предметов, которые соответствуют 7 div.Я имею в виду, что при нажатии первой li должна открыться соответствующая div, а остальные должны скрыться, а при нажатии 2-й li должна открыться вторая div, а остальные скрыться.У кого-нибудь есть идеи, как заставить эти элементы отображать скрытие при действии элементов li слева.Я знаю, что должен передать параметры для showDivs(), но не знаю как?

помощь приветствуется

Ответы [ 6 ]

2 голосов
/ 24 июля 2011

Я считаю, что именно здесь .index() вступает в игру:

$(function() {
    $('ul li').each(function() {
        $(this).click(function(e) {
            var i = $(this).index();
            $('div').hide();
            $('div:eq('+i+')').show();
        });
    });
});

Это довольно простая разметка, но я уверен, что вы можете решить, как заставить ее работать с вашим кодом. Надеюсь, я помог!

http://jsfiddle.net/Z3Hj7/

РЕДАКТИРОВАТЬ : После того, как я увидел вашу скрипку, я думаю, что сработал именно то, что вы хотите:

$(function() {
    $('ul li').each(function() {
        $(this).click(function(e){
            e.preventDefault();
            var i = $(this).index();
            $('.content').hide();
            $('.head:eq('+i+')').next().show();
        }); 
    });
});

Взгляните на скрипку: http://jsfiddle.net/DTcGD/25/

0 голосов
/ 04 июня 2019

вы можете показать и скрыть несколько делений, используя этот простой метод

function w3_open() { 
     document.getElementById("id01").style.display = 
    "block"; document.getElementById("id02").style.display = "block"
     }

убедитесь, что вы используете w3.css

<button onclick="w3_open()" class="w3-button w3-opacity w3-black">Yesterday</button>
<div id="id01" class="w3-panel w3-white w3-card w3-display-container">
<span onclick="document.getElementById('id01').style.display='none'" 
    class="w3-button w3-display-topright">&times;</span>
<p class="w3-text-blue"><b>email.zip</b></p>
<p>https://www.w3schools.com/lib/email.zip</p>
<p class="w3-text-blue">Show in folder</p>
</div>
<div id="id02" class="test w3-panel w3-white w3-card w3-display- 
 container">

<span onclick="document.getElementById('id02').style.display='none'" 
    class="w3-button w3-display-topright">&times;</span>
<p class="w3-text-blue"><b>email.zip</b></p>
<p>https://www.w3schools.com/lib/email.zip</p>
<p class="w3-text-blue">Show in folder</p>
</div>
0 голосов
/ 24 июля 2011

Если вы хотите использовать .index (), как это было предложено кем-то ранее, то я верю, что это будет самый простой подход (проверьте здесь http://jsfiddle.net/ECbkd/7/):

$("li").click(function() {
    $(".content").hide();
    $('.item').eq($(this).index()).children('.content').fadeIn();
})

Вы можете добавить это, чтобы бытьвозможность отображать содержимое при нажатии на заголовок также:

$("h2", ".container").click(function() {
    $(".content").hide();
    $(this).parent().children('.content').fadeIn();
})

* РЕДАКТИРОВАТЬ НАЧАЛО * Чтобы разрешить переключение содержимого при нажатии на заголовок, используйте следующее:

$("h2", ".container").click(function() {
    $(".content").not($(this).parent().children('.content')).hide();
    $(this).parent().children('.content').toggle();
})

Обновленокод здесь http://jsfiddle.net/ECbkd/8/ * РЕДАКТИРОВАНИЕ КОНЕЦ *

Это основано на html, как это:

<ul>
    <li>Item 01</li>
    <li>Item 02</li>
    <li>Item 03</li>
    <li>Item 04</li>
    <li>Item 05</li>
    <li>Item 06</li>
    <li>Item 07</li>
</ul>
<div class='container'>
    <div class='item'>
        <h2>Header 1</h2>
        <div class='content'>Content 1</div>        
    </div>        
    <div class='item'>
        <h2>Header 2</h2>
        <div class='content'>Content 2</div>       
    </div>
    <div class='item'>
        <h2>Header 3</h2>
        <div class='content'>Content 3</div>       
    </div>
    <div class='item'>
        <h2>Header 4</h2>
        <div class='content'>Content 4</div>       
    </div>
    <div class='item'>
        <h2>Header 5</h2>
        <div class='content'>Content 5</div>       
    </div>
    <div class='item'>
        <h2>Header 6</h2>
        <div class='content'>Content 6</div>       
    </div>
    <div class='item'>
        <h2>Header 7</h2>
        <div class='content'>Content 7</div>       
    </div>

</div>
0 голосов
/ 24 июля 2011

Если я правильно понимаю вашу HTML-структуру, она выглядит примерно так:

<!-- The list... -->
<ul>
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
  <li>Four</li>
</ul>

<!-- The divs -- note I've assumed there's a container... -->
<div id="container">
  <div class="head">Header One</div>
  <div class="Content">Content One</div>
  <div class="head">Header Two</div>
  <div class="Content">Content Two</div>
  <div class="head">Header Three</div>
  <div class="Content">Content Three</div>
  <div class="head">Header Four</div>
  <div class="Content">Content Four</div>
</div>

... только с семью предметами, а не с четырьмя.

Если это так, это будет сделано ( живая копия ):

jQuery(function($) {

  $(".Content").hide();

  $("li").click(function() {
    showDivs($("#container div.head:eq(" + $(this).index() + ")"));
  });
  $(".head").click(function() {
    showDivs($(this));
  });

  function showDivs(head) {
    $(".Content").hide();
    head.next().fadeIn("slow");
  }

});

Там я неявно связываю список с заголовками, где они находятся в своем контейнере. Итак, первый li относится к первому div с class = "head", второму ко второму и т. Д. Я делаю это с помощью index, чтобы узнать, какой li был нажат, а затем поиск связанных div.head, используя :eq.

Делать это структурно, а не со значениями id значительно упрощает обслуживание. С другой стороны, вы можете сделать это, указав каждому атрибуту li a data-div значение id соответствующего элемента div:

<ul>
  <li data-div="h1">One</li>
  <li data-div="h2">Two</li>
  <li data-div="h3">Three</li>
  <li data-div="h4">Four</li>
</ul>
<div id="container">
  <div id="h1" class="head">Header One</div>
  <div class="Content">Content One</div>
  <div id="h2" class="head">Header Two</div>
  <div class="Content">Content Two</div>
  <div id="h3" class="head">Header Three</div>
  <div class="Content">Content Three</div>
  <div id="h4" class="head">Header Four</div>
  <div class="Content">Content Four</div>
</div>

Тогда ( живая копия ):

jQuery(function($) {

  $(".Content").hide();

  $("li").click(function() {
    showDivs($("#" + $(this).attr("data-div")));
  });
  $(".head").click(function() {
    showDivs($(this));
  });

  function showDivs(head) {
    $(".Content").hide();
    head.next().fadeIn("slow");
  }

});

data-* атрибуты действительны с HTML5, но все браузеры поддерживают их прямо сейчас. (data-* - это попытка кодифицировать и господствовать в использовании людьми недопустимых атрибутов, предоставляя им правильный способ сделать это, не вступая в конфликт с будущими дополнениями к спецификации.)

0 голосов
/ 24 июля 2011

Как насчет присвоения идентификатора каждому элементу списка и соответствующего идентификатора каждому контейнеру элемента. Таким образом, ваши элементы списка получают идентификатор "item01" .. "item07", а ваши контейнеры содержимого получают идентификатор "item01c" .. "item07c". Тогда вы можете сделать что-то вроде этого:

$("li").click(function() {
    showDivs($(this).attr("id"));
})

function showDivs(callerId) {
  $(".content").hide();
  $(".content", "#" + callerId + "c").fadeIn();  
}

Рабочий пример можно посмотреть здесь: http://jsfiddle.net/ECbkd/5/ 1

0 голосов
/ 24 июля 2011

Если вы даете li и соответствующие div одинаковые class, вы можете сказать что-то вроде

function showDivs() {
$("li").click(function() {
    $(".Content").hide();
    clickedID = $(this).attr("class");
    $('div#'+clickedID).fadeIn("slow");

})

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...