JQuery - 显示/隐藏行和操纵css

时间:2014-11-15 18:47:47

标签: jquery html css

在搜索我的问题的解决方案时,我遇到了这个帖子: 使用javascript类显示/隐藏表行 Show/Hide Table Rows using javascript classes

我选择了Vape的解决方案(第4号)并且效果非常好。 但还有一些事情需要做: 我使用了css背景图片(一个带有'加号的简单圆圈'用于 保存click事件的行)。 单击加号可打开基础行。到现在为止还挺好。 扩展行后,我需要将加号更改为减号,这样就可以再次隐藏行。 经过一番调整(我在JQuery / Javascript中毫无用处 - 但我刚刚开始......),我设法切换了css类cat-plus和cat-minus。 问题是可以扩展的行数多于一行。 但每次单击可扩展行时,加号将变为所有其他可扩展行上的减号,但当然它们仍会折叠,因为它们尚未被单击。

我知道我必须考虑点击行的数据产品,但我无法弄清楚如何做到这一点。

示例如下: http://jsfiddle.net/8gbLagjz/

这是HTML

<table>
<tr>
    <td>Product</td>
    <td>Price</td>
    <td>Destination</td>
    <td>Updated on</td>
</tr>
<tr>
    <td>Oranges</td>
    <td>100</td>
    <td><a href="#" class="toggler" data-prod-cat="1"><span class="cat-plus">+ On Store</span></a></td>
    <td>22/10</td>
</tr>
<tr class="cat1" style="display:none">
    <td>Oranges</td>
    <td>120</td>
    <td>City 1</td>
    <td>22/10</td>
</tr>
<tr class="cat1" style="display:none">
    <td></td>
    <td>140</td>
    <td>City 2</td>
    <td>22/10</td>
</tr>
<tr>
    <td>Apples</td>
    <td>100</td>
    <td><a href="#" class="toggler" data-prod-cat="2"><span class="cat-plus">+ On Store</span></a></td>
    <td>22/10</td>
</tr>
<tr class="cat2" style="display:none">
    <td></td>
    <td>120</td>
    <td>City 1</td>
    <td>22/10</td>
</tr>
<tr class="cat2" style="display:none">
    <td></td>
    <td>140</td>
    <td>City 2</td>
    <td>22/10</td>
</tr>

脚本

$(document).ready(function(){
$(".toggler").click(function(e){
    e.preventDefault();
    $('.cat'+$(this).attr('data-prod-cat')).toggle();
    $(".cat-plus").toggleClass("cat-minus");
});

});

CSS

.cat-plus {background-image:url("../images/plus.png"); background-repeat:no-repeat; background-position:-15px center; border-left: 20px solid green;}
.cat-minus {background-image:url("../images/minus.png"); background-repeat:no-repeat; background-position:-15px center; border-left: 20px solid red;}

我已经用绿色(for +)和红色(for - )背景替换了图像,因为我已经看过了 没办法在这里整合图像。但是无论如何你都会看到我的意思。 在这个示例中,我不希望第二行在单击第一行时变为红色。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我找到了解决问题的方法:

链接到jsfiddle示例:http://jsfiddle.net/larryjoelane/8gbLagjz/5/

您遇到的主要问题是选择包含您的范围的范围类 猫加班。因为它是你的锚标记的孩子,所以你必须使用它 Jquery parent()函数然后找到包含.cat-plus类的span 使用find()函数。找到跨度后,您可以使用toggleClass()来切换 .cat-plus类。

我只需要对您的JavaScript进行更改,下面是我所做的更改:

      $(document).ready(function(){


        $(".toggler").click(function(e){

          e.preventDefault();

            //the data stored in the data-prod-cat
            var prodCat = ($(this).attr("data-prod-cat"));

           //toggle the link clicked on
           $(".cat" + prodCat).toggle();


           //select the parent and find the span so you can
          //toggle the "cat-plus" class
          $(this).parent().find("span").toggleClass("cat-plus");

         //toggle the cat-minus class
         $(this).toggleClass("cat-minus");        

        });
      });

答案 1 :(得分:0)

我怀疑这条线没有做你想做的事:

$(".cat-plus").toggleClass("cat-minus");

相反,你可能想要:

$(".cat-plus").addClass("cat-minus").removeClass(".cat-plus");