jQuery - 导航 - 如果找到特定的 id,则执行某些操作。

发布于 2024-11-27 15:39:53 字数 881 浏览 1 评论 0原文

我似乎无法理解我在这里做错了什么。

在某种程度上,我的代码确实有效,但它不是找到被单击元素的 id,而是找到所有 id

http://jsfiddle.net/34a5b/ - 我将其设置为动画,以便您可以看到它找到了 #item1 然后#item2

我正在寻找的基本功能如下:

当点击 li 时 >查找特定 ID >做功能 对应那个特定的id

关于为什么这不起作用的任何想法?

    var $Nav= $('#Nav');
    var $Boxee= $('#BoxeeBox');
$Nav.each(function(){
    $(this).find('li').click(function() {
        if( $(this).find('#item1') ){
            $Boxee.animate({ backgroundColor:'blue' });
        }
        if( $(this).find('#item2') ){
            $Boxee.animate({ backgroundColor:'red' });
        }
    });
});

现在我想知道为什么我把 $nav.each...


我也试图找出更动态/更简单的方法来做类似的事情,但我无法弄清楚...惊喜惊喜...如果有人的话我会很感激也可以为我指出那个方向(尽管我仍然想知道为什么我的代码不起作用)

I cant seem to understand what i'm doing wrong here.

To certain extend my code does work but instead of finding the id of the clicked element, it finds all the ids

http://jsfiddle.net/34a5b/ - I put it to animate so you can see that it finds #item1 and then #item2

The basic functionality I'm looking for goes like this:

When li is clicked > find specific id > do the functionality
corresponding that specific id

Any ideas on why this doesnt work?

    var $Nav= $('#Nav');
    var $Boxee= $('#BoxeeBox');
$Nav.each(function(){
    $(this).find('li').click(function() {
        if( $(this).find('#item1') ){
            $Boxee.animate({ backgroundColor:'blue' });
        }
        if( $(this).find('#item2') ){
            $Boxee.animate({ backgroundColor:'red' });
        }
    });
});

Now i wonder why i put $nav.each....


I was also trying to figure out more dynamic/simpler way of doing something like that but I couldnt figure that out.. surprise surprise... I'd appreciate if someone could point me to the direction with that one as well ( though I'd still like to know why my code doesnt work )

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

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

发布评论

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

评论(2

攒眉千度 2024-12-04 15:39:53

您不必循环遍历 $Nav。如果您说 $('#Nav li').click(...) ,jQuery click 将绑定到所有 li

您的代码不起作用的原因是:$(this).find('#item1') - 这里 $(this) 表示 li,所以你正在努力寻找 #item1 本身。

已修复: http://jsfiddle.net/34a5b/1/

var $Nav = $('#Nav li');
var $Boxee = $('#BoxeeBox');
$Nav.click(function() {
    if (this.id == 'item1') {
        $Boxee.animate({
            backgroundColor: 'blue'
        });
    }
    if (this.id == 'item2') {
        $Boxee.animate({
            backgroundColor: 'red'
        });
    }
});

稍微好一点(性能)的版本是使用 .delegate ( http://jsfiddle.net/34a5b/9/ ):

$('#Nav').delegate('li', 'click', function() {
        if (this.id == 'item1') {
            $Boxee.animate({
                backgroundColor: 'blue'
            });
        }
        if (this.id == 'item2') {
            $Boxee.animate({
                backgroundColor: 'red'
            });
        }
    });

You don't have to loop thru $Nav. jQuery click will bind to all li if you say $('#Nav li').click(...)

Reason for your code to not work is: $(this).find('#item1') - here $(this) means the li, so you're tyring to find #item1 within itself.

Fixed: http://jsfiddle.net/34a5b/1/

var $Nav = $('#Nav li');
var $Boxee = $('#BoxeeBox');
$Nav.click(function() {
    if (this.id == 'item1') {
        $Boxee.animate({
            backgroundColor: 'blue'
        });
    }
    if (this.id == 'item2') {
        $Boxee.animate({
            backgroundColor: 'red'
        });
    }
});

Slightly better (performant) version is to use .delegate ( http://jsfiddle.net/34a5b/9/ ):

$('#Nav').delegate('li', 'click', function() {
        if (this.id == 'item1') {
            $Boxee.animate({
                backgroundColor: 'blue'
            });
        }
        if (this.id == 'item2') {
            $Boxee.animate({
                backgroundColor: 'red'
            });
        }
    });
dawn曙光 2024-12-04 15:39:53

不知道你为什么使用每个功能。以下代码将

       var $Nav= $('#Nav');
       var $Boxee= $('#BoxeeBox');
       $('#Nav li').click(function() {
           if( $(this).attr('id') == 'item1' ){ 
               $Boxee.animate({ backgroundColor:'blue' });
           }
           else if($(this).attr('id') == 'item2') { 
               $Boxee.animate({ backgroundColor:'red' });
           }
       });

http://jsfiddle.net/34a5b/10/ 处检查 Fiddle

In don't know why you are using each function. Following code will do

       var $Nav= $('#Nav');
       var $Boxee= $('#BoxeeBox');
       $('#Nav li').click(function() {
           if( $(this).attr('id') == 'item1' ){ 
               $Boxee.animate({ backgroundColor:'blue' });
           }
           else if($(this).attr('id') == 'item2') { 
               $Boxee.animate({ backgroundColor:'red' });
           }
       });

check Fiddle at http://jsfiddle.net/34a5b/10/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文