简体   繁体   English

显示特定 <div> 在click()上

[英]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-1div#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 idproduct-这意味着你正在寻找称为元素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 . 更好的方法是使用单击的liindex()来找到相关的.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM