解决方案 »

  1.   

    首先,调用要将当前对象作为参数传递  你可能类似这样的写法 onclick="shcon(this);"1.function shcon(obj){
    //获取ul中的index的值 用 this或者$(this)表示
    alert($(obj).parents("ul").attr("index"));
    }
    2.function shcon(obj){
    //获取ul中的index的值 用 this或者$(this)表示
    alert($(obj).attr("index"));
    }
      

  2.   

    为什么不能用
    function shcon(){alert($(this).parents("ul").attr("index"));
    }能解释一下么
      

  3.   

    如果有多个ul并列第一个问题当中能不能知道点击的时候是第几个ul
      

  4.   

    可以点击演示代码,在线测试,点击圆点右边的绿色部分,就是点击ul,点击黄色部分,就是点击li
    为什么一定要用this?触发事件的话,可以使用e.target$().ready(function(){
        $('.etxt a, ul li').click(function(e){
            e.preventDefault();
            shcon(e);
            return false;
        });
        function shcon(e){
        //获取ul中的index的值 用 this或者$(this)表示
            alert('点击li=>ul index=' + $(e.target).parents('ul').attr('index'));
        }
        
        $('ul').click(function(e){
            e.preventDefault();
            shcon2(e);
            return false;
        });
        function shcon2(e){
        //获取ul中的index的值 用 this或者$(this)表示
            alert('点击ul=>ul index=' + $(e.target).attr('index'));
        }
    });
      

  5.   

    你点击的区域,其实可能是有很多层的,有ul,也有li,在上面的也是代码里你可以看到,黄色的是li这个层,如果你把右上窗口的li的css注释掉或者删除,再点RUN,你可以看到下面绿色的ul层。
    浏览器默认会触发所有这些层的点击事件,所以它分不清楚到底这个this是哪一个层。一般浏览器是从上而下触发事件的,如果不调用return false并且相应层有事件的话,浏览器会都触发,你可以把演示代码里面的return false注释掉,你会发现li和ul的点击事件都触发了。
      

  6.   

    如果有多个ul并列第一个问题当中能不能知道点击的时候是第几个ul
      

  7.   

    每个li都是在一个ul节点里面的,也就是它的父辈ul节点就只有一个。$(e.target).parents('ul')会查找被点击的li父辈节点中最近的ul节点,找到了节点,自然可以知道它的index