【问题标题】:when click on list item hide other items单击列表项时隐藏其他项
【发布时间】:2014-03-27 15:49:48
【问题描述】:

我在列表中有价格,我想在点击价格时隐藏其他价格范围

Demo Jsfiddle

我的列表项有不同的类名,第一个是第一个或最后一个是html:

要点击的列表:

    <h2>Filter By Price</h2>
                <ol id="myAnchor">                        
                    <li><a id="0-20" href="#" >0.00 - 20.00</a></li>
                    <li><a id="20-50" href="#">20.00 - 50.00</a></li>
                    <li><a id="50-80" href="#" >50.00 - 80.00</a></li>
                    <li><a id="80-100" href="#">80.00 - 100.00</a></li>
                    <li><a id="All" href="#">All</a></li>
                </ol>    

将显示的列表:

<ul class="box-content">
        <?php endif ?>
        <li id="<?php 

        $price= $_item->getPrice();
        switch ($price)
        {
            case ($price<20):
            echo "0-20";
            break;

            case ($price>20 && $price<50):
            echo "20-50";
            break;

            case ($price>50 && $price<80):
            echo "50-80";
            break;

            case ($price>80 && $price<100):
            echo "80-100";
            break;
        } ?>" class="item<?php if (($i - 1) % $col == 0):?> first<?php elseif ($i % $col == 0): ?> last<?php endif; ?>">

javascript函数:

(function(j$) {    
j$("#myAnchor").click(function(e)
          {
             var id=e.target.id;
             switch(id)
            {
            case("0-20"):
                    alert("something");
                var a = document.getElementsByTagName('li')
                var all_at_once = "";
                for(i=0;i<a.length;i++){
//                  alert(a[i].childNodes[0].text());
                    //if(a[i].childNodes[0].id=="20-50" || a[i].childNodes[0].id=="50-80"||a[i].childNodes[0].id=="80-100")
                      // j$('.box-content ul li').hide();
                            //a[i].childNodes[0].style.display="none";
                       ??????????? I don't knwo what to do in for loop
                }

            break;

        }

              }); //click anchor
    })(jQuery);//ready

【问题讨论】:

  • ID 和类名必须以字母字符开头。
  • 元素ID必须唯一!!!
  • 不,我不想成为独一无二的我想隐藏它们我在那个部分没有问题
  • 如果您不希望它们是唯一的,请改用类。 ID 必须是唯一的。
  • 但我不能我已经上课了

标签: javascript php jquery html css


【解决方案1】:

就这样做

$("#myAnchor li a").click(function(){
    $("#myAnchor li").not($(this).parent()).hide();
});

参考LIVE DEMO

更新:

根据选择范围隐藏价目表

$("#myAnchor li a").click(function(){
    var prices = $(".box-content li");
    prices.show();
    if (this.id != "All")
        prices.not($(".box-content li[id='"+this.id+"']")).hide();
});

参考LIVE DEMO 2

【讨论】:

  • 不错的一个!比我的更简单:)
  • 不幸的是它也会隐藏它自己的范围
  • 我在这里可能是错的,但你不是隐藏了错误的元素吗?我以为 OP 想在.box-content 中隐藏价格?
  • 谢谢你 :) 好漂亮
【解决方案2】:

由于元素的 ID 必须是唯一的,因此请使用 data-* 属性,例如

<h2>Filter By Price</h2>
<ol id="myAnchor">                        
    <li><a data-range="0-20" href="#" >0.00 - 20.00</a></li>
    <li><a data-range="20-50" href="#">20.00 - 50.00</a></li>
    <li><a data-range="50-80" href="#" >50.00 - 80.00</a></li>
    <li><a data-range="80-100" href="#">80.00 - 100.00</a></li>
    <li><a data-range="All" href="#">All</a></li>
</ol>   
<ul class="box-content">
    <li data-range="0-20">13$</li>
    <li data-range="20-50">23$</li>
    <li data-range="50-80">60$</li>
</ul>

然后

(function ($) {
    var $contents = $('.box-content > li');
    $("#myAnchor li").click(function (e) {
        var range = $(this).find('a').data('range');
        if (range == 'All') {
            $contents.show();
        } else {
            $contents.hide().filter('[data-range="' + range + '"]').show()
        }
    }); //click anchor
})(jQuery); //ready

演示:Fiddle

【讨论】:

  • 如果您对支持旧版浏览器(非HTML5)感到困扰,请不要使用此方法...
【解决方案3】:

@Arun 有一个很好的答案,但为了多样化,我会添加这个。

首先,您需要确保没有重复的ids。其次,它们应该以字母而不是数字开头。将ul .box-content 中列表元素的ids 更改为与锚链接的ids 匹配的类。像这样的:

<ol id="myAnchor">                        
    <li><a id="zero-20" href="#" >0.00 - 20.00</a></li>
    <li><a id="twenty-50" href="#">20.00 - 50.00</a></li>
    <li><a id="fifty-80" href="#" >50.00 - 80.00</a></li>
    <li><a id="eighty-100" href="#">80.00 - 100.00</a></li>
    <li><a id="All" href="#">All</a></li>
</ol>   


<ul class="box-content">
    <li class="zero-20">13$</li>
    <li class="twenty-50">23$</li>
    <li class="fifty-80">60$</li>
</ul>

现在,使用 jQuery 的 .siblings() 选择器,您可以执行类似的操作来隐藏除您单击的项目之外的所有内容。

$(document).ready(function() {
    $('#myAnchor li a').click(function(){
        var change = $(this).attr('id');
        $('.box-content .'+change).show();
        $('.box-content .'+change).siblings().hide();
    });
});

下面是它的实际操作:http://jsfiddle.net/5rWQN/

【讨论】:

  • 我真的不知道有什么问题,我无法让它在我的代码中工作我什至无法在点击功能中提醒任何东西我不知道;不知道为什么
  • 是的,但它在我的 php 代码中不起作用,尽管一切都很好 +1
  • @Nickparsa 然后你可能想考虑用你的新标记和代码创建一个新问题来找出问题所在
【解决方案4】:

使用 jQuery 就可以了:

$(document).ready(function() {
    $("#myAnchor a").click(function() {
        $("#myAnchor li").hide(); // hide all "li" elements
        $(this).parent().show(); // show the clicked "li" element
    })
});

这是一个现场演示:Fiddle

【讨论】:

  • 对不起,我看不到您的更改
猜你喜欢
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
  • 2017-09-28
  • 1970-01-01
  • 2012-12-13
相关资源
最近更新 更多