2012-03-01 67 views
2

我有一大堆的嵌套列表:选择点击的元素,而不是其父母

<ul> 
    <li>item 1</li> 
    <li>item 2</li> 
    <li>item 3 
     <ul> 
      <li>child-1</li> 
      <li>child-2 
       <ul> 
        <li>grand-child 1</li> 
       </ul> 
      </li> 
     </ul> 
    </li> 
</ul> 

使用jQuery,与点击或悬停,我想使用的项目(LI)。但它给了我它的父母。 如:如果我点击(或悬停)盛大孩子1,$(这)返回ITEM-3(父亲的父亲)

我的jQuery代码:

$('ul li').live('click', function(e) { 
    someVar = $(this).data("dataname"); // (can be .attr(""), etc.); 
}); 

当任何立的点击,我该如何使用特定的一个,而不是它所嵌套的父级?

+0

不清楚是什么问题... clcik或悬停,你总能得到“本”为元素,遍历从$(本)做什么,需要 – charlietfl 2012-03-01 16:23:36

+0

问题,正如我所说在问题本身中,是这样的,$(this)给我最多的父母LI而不是被点击的LI。 – Phil 2012-03-01 16:24:16

+0

不,不,它创建一个小提琴演示 – charlietfl 2012-03-01 16:26:20

回答

3

会有帮助吗?如果你看到console.log,它只会返回当前点击的项目。阅读关于stopPropagation here的文档。

“的文件指出,stopPropagation防止冒泡DOM树,阻止任何 父处理程序被通知的事件的事件。”

我也更新现场对,活已被弃用的1.7

$('ul li').on('click', function(e) { 
    e.stopPropagation(); 
    console.log($(this)); 
}); 
+0

它工作.. [这里](http://jsfiddle.net/qsr47/1/)是小提琴。 – Exception 2012-03-01 16:31:41

+0

我爱你!非常感谢!我发誓,当我搜索和搜索时,我正在疯狂,但不能拿出这个。非常感谢!谢谢! ;-) Ps。我即将使用委托,但似乎更好。谢谢你,一次又一次,再次! – Phil 2012-03-01 16:34:14

+0

@Phil。很高兴帮助:) – DG3 2012-03-01 16:35:21

2

我想下面是你在找什么,

$('ul li').live('click', function(e) { 
    e.stopPropagation(); 
    someVar = $(this).data("dataname"); 
}); 

e.stopPropagation();停止任何事件传播与其他配对ul li

注:如果您使用jQuery v1.7,请使用.on,因为.live已弃用。

$(document).on('click', 'ul li', function(e) { 
    e.stopPropagation(); 
    alert($(this).text()); // (can be .attr(""), etc.); 
}); 

DEMO

+0

你好,我没有看到你的答案,但谢谢你!非常感谢你! – Phil 2012-03-01 16:35:09

相关问题