2011-05-13 72 views
2

页面加载后创建的标签我有小的应用程序: http://jsfiddle.net/Bwdf6/4/删除与jQuery

但随着点击删除,即后页面加载犯规删除创建的标签。 有什么办法来删除页面加载后创建的标签?

在此先感谢

+0

hummm ......你不必在删除任何行动......你想干什么?使用jQuery删除添加的元素,或重新加载页面? – 2011-05-13 11:42:02

+1

我认为每个人都应该停下来回答'.live()'这些类型的问题。这不是最佳做法,应该在最有可能的情况下使用'.delegate()'。我们应该在这里建议最佳实践,而不是狩猎代表。 – kapa 2011-05-13 11:47:01

+0

参见@ Mark的解答比使用live()更有效。 – Town 2011-05-13 12:00:36

回答

4

使用live() - Working Demo

$('.sp').live("click", function() { 
     $(this).parent().remove(); 
    }); 

当你动态地创建元素,使用click()是不够的 - 只分配一个单击处理程序存在的时候click()被称为所有.sp元素。

live(),在另一方面,用于:

附加一个处理程序事件当前 选择器现在和将来匹配其中,所有 元素。

因此,任何动态添加的新元素与sp类都会将该处理程序附加到它们。

编辑:其实,一对夫妇的人指出,虽然live()会做你需要什么,在这种情况下使用最有效的功能将是delegate(),这是用来:

附加一个处理程序,以一个或多个事件 为一组特定的根元素的基础 的 选择现在或将来匹配,所有的元素。

我不会通过发布代码示例来窃取荣耀 - 请参阅@ Mark的答案,应该接受而不是我的。

+0

+1编辑(和体育道德)。 – kapa 2011-05-13 12:06:28

1

这就是为什么live()的 '发明'。

变化:

$('.sp').click (function() { 

有:

$('.sp').live('click', function() { 
2

您可以使用.live().delegate()

.delegate()将是最好的选择,因为所有的项目都有一个共同的母公司。

$('#theList').delegate(".sp", "click", function() { 
    $(this).parent().remove(); 
}); 

Updated fiddle

+0

+1终于有人建议'.delegate()':) – kapa 2011-05-13 11:48:54

+0

+1 Mark,我不知道委托在这种情况下会更有效率。 – Town 2011-05-13 11:50:29