[英]Show a specific <div> on click()
I have this code 我有这个代码
$('.description').hide(); $('li').click(function() { var id = $(this).attr("id"); $('#product-' + id).show(); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul> <li id="product-1">Product 1</li> <li id="product-2">Product 2</li> <li id="product-3">Product 3</li> <li id="product-4">Product 4</li> </ul> <div class="description-container"> <div class="description" id="product-1"> <h2>Product 1</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Unde est necessitatibus illo ducimus impedit debitis facere amet, distinctio explicabo ab, qui modi molestias molestiae incidunt omnis. Quisquam, labore vero amet.</p> </div> <div class="description" id="product-2"> <h2>Product 2</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Optio similique, explicabo voluptatibus. Id sit deserunt impedit, incidunt consequuntur quam quae, dolor non quaerat rem debitis vitae error ipsa quo dignissimos!</p> </div> <div class="description" id="product-3"> <h2>Product 3</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Excepturi distinctio molestias culpa enim architecto optio ratione, saepe, ullam libero. Mollitia quis, ipsum similique in inventore aut officia optio quam odio?</p> </div> <div class="description" id="product-4"> <h2>Product 4</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est distinctio nam minus unde provident, fugit doloremque minima rerum ullam nemo, rem culpa ipsa fugiat quas. Officiis error animi omnis sunt.</p> </div> </div>
What I want is when I click on li#product-1
, .description-container #product-1
appears. 我想要的是当我单击li#product-1
,出现.description-container #product-1
。
Same thing if I click on li#product-2
, etc. 如果我单击li#product-2
等,也是一样。
I try something in jQuery but it does not work. 我在jQuery中尝试了一些方法,但是没有用。
First, prepending #product-
to the the id
s of your li
elements will give something like "#product-product-1"
, which won't match anything. 首先,在您的li
元素的id
之前加上#product-
会得到类似"#product-product-1"
,该名称与任何内容都不匹配。
Even if we did correct that, you can't have multiple elements with the same id
-- there's no differentiation li#product-1
from div#product-1
. 即使我们确实做了纠正,您也不能有多个具有相同id
元素li#product-1
与div#product-1
没有区别。 id
s must be unique; id
必须是唯一的; best-case, you'll select the li
itself since it's the first match. 在最佳情况下,您将选择li
本身,因为它是第一个匹配项。
Instead, add a data-...
attribute to the li
s, and use that: 相反,向li
添加data-...
属性,并使用该属性:
$('.description').hide(); $('li').click(function() { var id = $(this).data("target"); $('#product-' + id).show(); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul> <li data-target="1">Product 1</li> <li data-target="2">Product 2</li> <li data-target="3">Product 3</li> <li data-target="4">Product 4</li> </ul> <div class="description-container"> <div class="description" id="product-1"> <h2>Product 1</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Unde est necessitatibus illo ducimus impedit debitis facere amet, distinctio explicabo ab, qui modi molestias molestiae incidunt omnis. Quisquam, labore vero amet.</p> </div> <div class="description" id="product-2"> <h2>Product 2</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Optio similique, explicabo voluptatibus. Id sit deserunt impedit, incidunt consequuntur quam quae, dolor non quaerat rem debitis vitae error ipsa quo dignissimos!</p> </div> <div class="description" id="product-3"> <h2>Product 3</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Excepturi distinctio molestias culpa enim architecto optio ratione, saepe, ullam libero. Mollitia quis, ipsum similique in inventore aut officia optio quam odio?</p> </div> <div class="description" id="product-4"> <h2>Product 4</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est distinctio nam minus unde provident, fugit doloremque minima rerum ullam nemo, rem culpa ipsa fugiat quas. Officiis error animi omnis sunt.</p> </div> </div>
Firstly you are appending the li
id
to product-
which means you're looking for elements called product-product-1
, which don't exist. 首先要附加的li
id
到product-
这意味着你正在寻找称为元素product-product-1
,这是不存在的。 Secondly your HTML has duplicate id
attributes on the li
and the related div
elements which is invalid. 其次,您的HTML在li
和相关的div
元素上具有重复的id
属性,这是无效的。
A better approach would be to use the index()
from the clicked li
to find the related .description
. 更好的方法是使用单击的li
的index()
来找到相关的.description
。 Try this: 尝试这个:
$('li').click(function() { $('.description').hide().eq($(this).index()).show(); });
.description { display: none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul> <li>Product 1</li> <li>Product 2</li> <li>Product 3</li> <li>Product 4</li> </ul> <div class="description-container"> <div class="description"> <h2>Product 1</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Unde est necessitatibus illo ducimus impedit debitis facere amet, distinctio explicabo ab, qui modi molestias molestiae incidunt omnis. Quisquam, labore vero amet.</p> </div> <div class="description"> <h2>Product 2</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Optio similique, explicabo voluptatibus. Id sit deserunt impedit, incidunt consequuntur quam quae, dolor non quaerat rem debitis vitae error ipsa quo dignissimos!</p> </div> <div class="description"> <h2>Product 3</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Excepturi distinctio molestias culpa enim architecto optio ratione, saepe, ullam libero. Mollitia quis, ipsum similique in inventore aut officia optio quam odio?</p> </div> <div class="description"> <h2>Product 4</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est distinctio nam minus unde provident, fugit doloremque minima rerum ullam nemo, rem culpa ipsa fugiat quas. Officiis error animi omnis sunt.</p> </div> </div>
$('.description').hide(); $('li').click(function() { var id = $(this).attr("id"); $('#div-'+id).show(); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul> <li id="product-1">Product 1</li> <li id="product-2">Product 2</li> <li id="product-3">Product 3</li> <li id="product-4">Product 4</li> </ul> <div class="description-container"> <div class="description" id="div-product-1"> <h2>Product 1</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Unde est necessitatibus illo ducimus impedit debitis facere amet, distinctio explicabo ab, qui modi molestias molestiae incidunt omnis. Quisquam, labore vero amet.</p> </div> <div class="description" id="div-product-2"> <h2>Product 2</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Optio similique, explicabo voluptatibus. Id sit deserunt impedit, incidunt consequuntur quam quae, dolor non quaerat rem debitis vitae error ipsa quo dignissimos!</p> </div> <div class="description" id="div-product-3"> <h2>Product 3</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Excepturi distinctio molestias culpa enim architecto optio ratione, saepe, ullam libero. Mollitia quis, ipsum similique in inventore aut officia optio quam odio?</p> </div> <div class="description" id="div-product-4"> <h2>Product 4</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est distinctio nam minus unde provident, fugit doloremque minima rerum ullam nemo, rem culpa ipsa fugiat quas. Officiis error animi omnis sunt.</p> </div> </div>
Change the id of the description div and the selector for hiding the div. 更改说明div的ID和用于隐藏div的选择器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.