jquery
2012-12-27 84 views 1 likes 
1

JS选择第一父

$(".deletable").live('click',function(){ 
     $(this).parent().effect('explode', 500, function(){ 
      $(this).parent().remove(); 
     }) 
}); 

HTML

<table> 
    <tr> 
     <td class='deletable'>hi</td> 
    </tr> 
</table> 

<ul> 
    <li> 
     <span class=deletable>hi</span> 
    </li> 
</ul> 

我想删除的情况下,tdtr点击和li情况span被点击。

由于某种原因,这是行不通的,而是整个ul/table被删除。

为什么这么说?

回答

5

出于某种原因,这是行不通的,而是整个UL /表 删除。

为什么这么说?

在您当前的代码this内点击事件引用clicked元素。
然后,您遍历元素的父元素,在其上调用。

内影响通话this现在指的是父(li/tr),但你打电话$(this).parent().remove();遍历到父(ul/table)的母公司,因此删除整个list/table

更改您的代码仅使用$(this).remove();您的通话效果,而不是里面,因为它已经涉及到所需的父元素(li/tr),像这样:

$(".deletable").live('click',function(){ 
     $(this).parent().effect('explode', 500, function(){ 
      $(this).remove(); 
     }) 
}); 
+0

工作:D,感谢解释 – Zalaboza

+0

@MomenMElZalabany:不客气。在嵌套调用中,“this”引用的内容有时会引起混淆。在大多数情况下,当使用jQuery时,它指的是您正在调用方法的对象。 – Nope

0

您也可以使用.parent的选择器。 http://api.jquery.com/parent/

$(this).parent("tr").remove(); 

你如何理解整个表/ UL被删除,如果你正在寻找它的调试工具,表/ UL只能有1个小孩元素浏览器可以删除表/ UL以及,与他们没有意义。

你可以尝试这个时,表/ ul有多个孩子?

0

使用本

$(this).parents("li:first").remove(); 
4

尝试

$(".deletable").live('click',function(){ 
    $(this).parent().effect('explode', 500, function(){ 
     // $(this) is still your parent 
     $(this).remove(); 
    }) 
}); 
+0

是的,这一个。我怎么错过了。 –

+0

大声笑有道理!,非常感谢它工作 – Zalaboza

相关问题