简化一组mouseover函数jquery

发布于 2024-11-14 12:25:43 字数 2706 浏览 2 评论 0原文

首先我要说的是,这是正常工作的,但我知道这不是最有效的编码方式,而且我缺乏如何做到这一点的知识/理解。

对于这个特定问题,我有 8 个不同的事件,它们使用 mouseover / mouseout 函数,其中隐藏了非上述悬停的其他类。我很好奇让它只用一个简单的代码块就可以处理无限量的事件。

任何帮助将不胜感激。到目前为止,这是我的代码...

function hoverBar() {

     $(".song1result").mouseover(function(){
            $('.barReadout').not('.bar1').fadeTo('fast', 0.1, function() {});
        }).mouseout(function(){
            $('.barReadout').not('.bar1').fadeTo('fast', 1.0, function() {});
    });

         $(".song2result").mouseover(function(){
            $('.barReadout').not('.bar2').fadeTo('fast', 0.1, function() {});
        }).mouseout(function(){
            $('.barReadout').not('.bar2').fadeTo('fast', 1.0, function() {});
    });

         $(".song3result").mouseover(function(){
            $('.barReadout').not('.bar3').fadeTo('fast', 0.1, function() {});
        }).mouseout(function(){
            $('.barReadout').not('.bar3').fadeTo('fast', 1.0, function() {});
    });

     $(".song4result").mouseover(function(){
            $('.barReadout').not('.bar4').fadeTo('fast', 0.1, function() {});
        }).mouseout(function(){
            $('.barReadout').not('.bar4').fadeTo('fast', 1.0, function() {});
    });

         $(".song5result").mouseover(function(){
            $('.barReadout').not('.bar5').fadeTo('fast', 0.1, function() {});
        }).mouseout(function(){
            $('.barReadout').not('.bar5').fadeTo('fast', 1.0, function() {});
    });

         $(".song6result").mouseover(function(){
            $('.barReadout').not('.bar6').fadeTo('fast', 0.1, function() {});
        }).mouseout(function(){
            $('.barReadout').not('.bar6').fadeTo('fast', 1.0, function() {});
    });

         $(".song7result").mouseover(function(){
            $('.barReadout').not('.bar7').fadeTo('fast', 0.1, function() {});
        }).mouseout(function(){
            $('.barReadout').not('.bar7').fadeTo('fast', 1.0, function() {});
    });

         $(".song8result").mouseover(function(){
            $('.barReadout').not('.bar8').fadeTo('fast', 0.1, function() {});
        }).mouseout(function(){
            $('.barReadout').not('.bar8').fadeTo('fast', 1.0, function() {});
    });
}

谢谢!!马特

编辑:

我从沙德的回应中得到了正确的答案,尽管它需要一些修改。

这是我的工作解决方案:

function hoverBar2() {
    $('.songresult').mouseover(function(){
    var ID=$(this).attr('id').replace('#','');
    var ID2 = ID.replace('res','');

   $('.barReadout').not('#bre' + ID2).fadeTo('fast', 0.1, function() {}); 
}).mouseout(function(){
             var ID=$(this).attr('id').replace('#bre','');
        ///  alert(ID);
   $('.barReadout').not('#bre' + ID).fadeTo('fast', 1.0, function() {}); 
    });



}

Let me start by saying that this is working correctly, but I know it's not the most efficient way of coding it and I'm lacking the knowledge / understanding as to how to do this.

For this specific problem, i have 8 different events that are using a mouseover / mouseout function where it is hiding other classes that aren't the said hover. I'm curious as to have it work for say an infinite amount of events with just a simple block of code.

Any help would be greatly appreciated. Here is my code thus far...

function hoverBar() {

     $(".song1result").mouseover(function(){
            $('.barReadout').not('.bar1').fadeTo('fast', 0.1, function() {});
        }).mouseout(function(){
            $('.barReadout').not('.bar1').fadeTo('fast', 1.0, function() {});
    });

         $(".song2result").mouseover(function(){
            $('.barReadout').not('.bar2').fadeTo('fast', 0.1, function() {});
        }).mouseout(function(){
            $('.barReadout').not('.bar2').fadeTo('fast', 1.0, function() {});
    });

         $(".song3result").mouseover(function(){
            $('.barReadout').not('.bar3').fadeTo('fast', 0.1, function() {});
        }).mouseout(function(){
            $('.barReadout').not('.bar3').fadeTo('fast', 1.0, function() {});
    });

     $(".song4result").mouseover(function(){
            $('.barReadout').not('.bar4').fadeTo('fast', 0.1, function() {});
        }).mouseout(function(){
            $('.barReadout').not('.bar4').fadeTo('fast', 1.0, function() {});
    });

         $(".song5result").mouseover(function(){
            $('.barReadout').not('.bar5').fadeTo('fast', 0.1, function() {});
        }).mouseout(function(){
            $('.barReadout').not('.bar5').fadeTo('fast', 1.0, function() {});
    });

         $(".song6result").mouseover(function(){
            $('.barReadout').not('.bar6').fadeTo('fast', 0.1, function() {});
        }).mouseout(function(){
            $('.barReadout').not('.bar6').fadeTo('fast', 1.0, function() {});
    });

         $(".song7result").mouseover(function(){
            $('.barReadout').not('.bar7').fadeTo('fast', 0.1, function() {});
        }).mouseout(function(){
            $('.barReadout').not('.bar7').fadeTo('fast', 1.0, function() {});
    });

         $(".song8result").mouseover(function(){
            $('.barReadout').not('.bar8').fadeTo('fast', 0.1, function() {});
        }).mouseout(function(){
            $('.barReadout').not('.bar8').fadeTo('fast', 1.0, function() {});
    });
}

Thanks!! Matt

Edit:

I was lead to the correct answer from Shad's response although it required a bit of tinkering.

Here's my working solution:


function hoverBar2() {
    $('.songresult').mouseover(function(){
    var ID=$(this).attr('id').replace('#','');
    var ID2 = ID.replace('res','');

   $('.barReadout').not('#bre' + ID2).fadeTo('fast', 0.1, function() {}); 
}).mouseout(function(){
             var ID=$(this).attr('id').replace('#bre','');
        ///  alert(ID);
   $('.barReadout').not('#bre' + ID).fadeTo('fast', 1.0, function() {}); 
    });



}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

他不在意 2024-11-21 12:25:43

如果您可以控制页面内容的呈现方式,那么我建议将标识号从类中移出并移至 idseg 中,

<div class="songresult" id="res1"></div>
<div class="barReadout" id="bre1"></div>

这将允许您编写 one所有实例的代码块:

$('.songresult').mouseover(function(){
    var ID=$(this).attr('id').replace(/\D/g,'');
   $('.barReadout').not('#bre' + ID).fadeTo('fast', 0.1, function() {}); 
});

If you have control of how the page content is rendered, then I would recommend moving the identifying numbers out of the classes and into the ids.
e.g.

<div class="songresult" id="res1"></div>
<div class="barReadout" id="bre1"></div>

This will allow you to write one block of code for all instances:

$('.songresult').mouseover(function(){
    var ID=$(this).attr('id').replace(/\D/g,'');
   $('.barReadout').not('#bre' + ID).fadeTo('fast', 0.1, function() {}); 
});
各空 2024-11-21 12:25:43

我对此类问题的解决方案是这样的:

我使用 id-s 代替类: id="songresult_1"id="bar_7"

$("[id^=songresult_]").each(function() {
    var id = $(this).attr("id").split("_")[1];
    $(this).mouseover(function(){
        $('.barReadout').not('#bar_'+id).fadeTo('fast', 0.1, function() {});
    }).mouseout(function(){
        $('.barReadout').not('#bar_'+id).fadeTo('fast', 1.0, function() {});
    });
});

My soltution for such problems is like this:

Instead of classes I use id-s: id="songresult_1" and id="bar_7"

$("[id^=songresult_]").each(function() {
    var id = $(this).attr("id").split("_")[1];
    $(this).mouseover(function(){
        $('.barReadout').not('#bar_'+id).fadeTo('fast', 0.1, function() {});
    }).mouseout(function(){
        $('.barReadout').not('#bar_'+id).fadeTo('fast', 1.0, function() {});
    });
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文