首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取已单击元素的ID名称,并显示具有相同类名的div。

获取已单击元素的ID名称,并显示具有相同类名的div。
EN

Stack Overflow用户
提问于 2017-08-23 09:43:19
回答 2查看 364关注 0票数 1

我的目标是获取单击导航按钮的ID名称(例如,位于#cat-1列表中的li元素的ul.accordion-content ID ),并显示具有类.cat-1名称相同的.gallery-item块。它不起作用,我也找不出原因。

代码语言:javascript
复制
$("ul.accordion-content > li").on("click", function() {
  var category = $(this).id;

  if ($(".gallery-item").hasClass(category)) {
    $(".gallery-item").show();
  } else {
    $(".gallery-item").hide();
  }

});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="accordion-content">
  <li id="cat-1">Category One</li>
  <li id="cat-2">Category Two</li>
  <li id="cat-3">Category Three</li>
</ul>

<div class="gallery-item cat-1">
  <div class="item-content">Item One</div>
</div>
<div class="gallery-item cat-1">
  <div class="item-content">Item One</div>
</div>

<div class="gallery-item cat-2">
  <div class="item-content">Item Two</div>
</div>
<div class="gallery-item cat-2">
  <div class="item-content">Item Two</div>
</div>

<div class="gallery-item cat-3">
  <div class="item-content">Item Three</div>
</div>
<div class="gallery-item cat-3">
  <div class="item-content">Item Three</div>
</div>

当我单击其中一个导航按钮时,它们都会消失。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-23 09:46:06

主要问题是id不是jQuery对象的属性,因此category被设置为undefined。要解决这个问题,您需要使用$(this).prop('id')this.id

还请注意,您可以通过选择类直接选择元素,而不是使用hasClass(),从而使逻辑更加简洁--这只适用于集合中的第一个元素。试试这个:

代码语言:javascript
复制
$("ul.accordion-content > li").on("click", function() {
  $('.gallery-item').hide().filter('.' + this.id).show()
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="accordion-content">
  <li id="cat-1">Category One</li>
  <li id="cat-2">Category Two</li>
  <li id="cat-3">Category Three</li>
</ul>

<div class="gallery-item cat-1">
  <div class="item-content">Item One</div>
</div>
<div class="gallery-item cat-1">
  <div class="item-content">Item One</div>
</div>

<div class="gallery-item cat-2">
  <div class="item-content">Item Two</div>
</div>
<div class="gallery-item cat-2">
  <div class="item-content">Item Two</div>
</div>

<div class="gallery-item cat-3">
  <div class="item-content">Item Three</div>
</div>
<div class="gallery-item cat-3">
  <div class="item-content">Item Three</div>
</div>

票数 3
EN

Stack Overflow用户

发布于 2017-08-23 09:46:06

尝尝这个。从当前单击项中获取id,即this通过this.id,然后将逻辑放在那里,隐藏所有.gallery-item,然后只使用.this.id类显示。

代码语言:javascript
复制
$('.accordion-content li').on('click', function(){
  $('.gallery-item').hide();
  $(`.${this.id}`).show();
});
代码语言:javascript
复制
div.gallery-item{
  display: none
 }
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="accordion-content">
  <li id="cat-1">Category One</li>
  <li id="cat-2">Category Two</li>
  <li id="cat-3">Category Three</li>
</ul>

<div class="gallery-item cat-1">
  <div class="item-content">Item One</div>
</div>
<div class="gallery-item cat-1">
  <div class="item-content">Item One</div>
</div>

<div class="gallery-item cat-2">
  <div class="item-content">Item Two</div>
</div>
<div class="gallery-item cat-2">
  <div class="item-content">Item Two</div>
</div>

<div class="gallery-item cat-3">
  <div class="item-content">Item Three</div>
</div>
<div class="gallery-item cat-3">
  <div class="item-content">Item Three</div>
</div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45836187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档