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>

我想删除tr案例td被点击和li案例span被点击。

由于某种原因,这不起作用,而是整个ul/table被删除。

为什么这样 ?

4

4 回答 4

5

由于某种原因,这不起作用,而是删除了整个 ul/table。

为什么这样 ?

在您当前的代码this中,click 事件指的是 clicked 元素。
然后你遍历元素的父元素来调用effect$(this).parent().effect...

在效果调用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();
      })
});
于 2012-12-27T15:05:31.490 回答
4

尝试

$(".deletable").live('click',function(){
    $(this).parent().effect('explode', 500, function(){
        // $(this) is still your parent
        $(this).remove();
    })
});
于 2012-12-27T15:01:45.913 回答
0

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

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

如果您正在查看调试工具并且 table/ul 只有 1 个子元素,您如何理解整个 table/ul 被删除,浏览器也可以删除 table/ul,因为没有子元素它们毫无意义。

当 table/ul 有多个孩子时,你可以试试这个吗?

于 2012-12-27T14:58:28.533 回答
0

用这个

$(this).parents("li:first").remove();
于 2012-12-27T14:59:48.473 回答