首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示隐藏内容时的奇怪jQuery行为

显示隐藏内容时的奇怪jQuery行为
EN

Stack Overflow用户
提问于 2015-10-17 10:26:43
回答 2查看 44关注 0票数 1

我有一系列名为filters的html内容,它是从数据库生成的。内容可以根据页面动态变化。我给每个主div提供了css I,并在循环时添加了一个数字。下面是一个示例片段:

代码语言:javascript
复制
<div><a id="filter-1">Brands</a></div>
<div id="filter-op-1">This is option 1</div>
<div><a id="filter-2">Size</a></div>
<div id="filter-op-2">This is option 2</div>
<div><a id="filter-3">Color</a></div>
<div id="filter-op-3">This is option 3</div>

ids、filter-1filter-op-1等是由循环数生成的,因此我们不知道页面上将为过滤器生成多少内容。

我需要通过单击a显示/隐藏filter x内容,因此我编写了以下jQuery代码:

代码语言:javascript
复制
$(document).ready(function () {
    $('div a').click(function() { 
        var self = $(this);
        var cssId = self.attr('id');
        var child = $('div#filter-op-'+cssId);
        child.toggle();
     });
});

现在的问题是,它不是这样工作的,但是如果我删除js代码中的cssId和html中的-1-2等,它就开始工作了,但是它隐藏了所有的内容,不管我单击了哪个a

我不知道是什么引起了这个问题。任何人都可以解释这个问题,并给出一些好的建议如何处理它?

JsFiddle来了

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-17 10:31:07

您需要对JS代码进行如下更改:

代码语言:javascript
复制
 $(document).ready(function () {
   $('div a').click(function() { 
    var self = $(this);
    var cssId = self.attr('id');
    console.log(cssId);  // This gives the `a` id.
    var id = cssId.split("-")[1]; // Split and get the number part
    console.log(id);

    var child = $('div#filter-op-'+id); // append the number part here
    child.toggle();
  });

});

小提琴:https://jsfiddle.net/sandenay/uk1Lquuh/1/

票数 2
EN

Stack Overflow用户

发布于 2015-10-17 10:44:44

发现的问题:您的cssId总是返回filter-1、filter-2、filter-3和子函数“div #filter-op-”+cssId) ==>‘div#filter-op-1,这会产生子div的错误id。

我增加了额外的数据属性

这是我的工作代码:

HTML:

代码语言:javascript
复制
<div><a id="filter-1" data="1">Brands</a></div>
<div id="filter-op-1">This is option 1</div>
<div><a id="filter-2" data="2">Size</a></div>
<div id="filter-op-2">This is option 2</div>
<div><a id="filter-3" data="3">Color</a></div>
<div id="filter-op-3">This is option 3</div>

联署材料:

代码语言:javascript
复制
$(document).ready(function () {
    $('div a').click(function() { 
        var self = $(this);
        var cssId = self.attr('data');
        var child = $('div#filter-op-'+cssId);
        child.toggle();
    });

});

更新的JSFIDDLE示例

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

https://stackoverflow.com/questions/33185496

复制
相关文章

相似问题

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