2012-03-01 63 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

相關問題