2012-06-01 44 views
5

我有两个div元素在另一个。有时,从用户交互性,这两个项目被删除,并放置两个新的元素。正确的方法来删除和添加新的HTML与jQuery

先删除现有元素是否合适?或者只是覆盖HTML?或者它甚至很重要?

$('#item1').remove(); 
$('#item2').remove(); 
$('#itemWindow').append(newItem1); 
$('#itemWindow').append(newItem2); 

或者干脆

$('#itemWindow').html(newItem1); 
$('#itemWindow').append(newItem2); 

一个是更少的代码,而应该把该项目,而不是删除?这些项目没有任何听众,但如果他们确实这样做有所作为?

我是一名ActionScript开发人员,潜入JS和jQuery。在AS中,如果存在任何监听器,则首先删除该项目以断开与该对象的任何连接以进行适当的内存收集是合适的。这些规则与JS和jQuery一样吗?

谢谢!

+0

我认为关于听众的答案将取决于您是否希望重用侦听器... – Jared

+2

如果您查看jQuery源代码,您会注意到html()方法的工作方式类似于> this.empty( ).append(值)。你正在复杂的地方你不需要;-)用于更短的代码,像> $('#itemWindow')。html(newItem1).append(newItem2); –

回答

3

他们没有区别。所以你可以继续使用第二种方法。当您使用此

$('#itemWindow').html(newItem1); 

$('#item1')$('#item2')将被替换。所以你可以跳过去除那些手动。

正如@glavić在评论中提到,如果你看一下jQuery的源html方法的定义在这里https://github.com/jquery/jquery/blob/master/src/manipulation.js#L213 你会发现它有这些行

if (elem) { 
    this.empty().append(value); 
} 

如果在这种情况下elem是真的结束。所以元素将是emptied,然后新元素将是appended

如果他们有听众,那么你必须绑定听众的方式,因此与动态添加元素的工作原理是利用$.on

0

$(“#物品1”)删除()。将删除id为item1的元素

$('#item1')。html(newItem1);将设置元素中的HTML与id项目1

0

如果你想具体说明你实际上要删除什么,例如说,如果你有一个元素需要被删除,但没有其他,那么我建议第一种方法。如果你只是每次都要更换所有东西,那么可以随意使用,或者,唯一的问题就是更适合你的东西。

0

如果item有任何监听器,那么第一种方法更合适。 .remove()删除项目本身和所有绑定事件。如果项目被删除,但不是事件,将来可能会发生错误。但如果没有有限的事件,可以使用第二种方法 - 减少代码。