jQuery detach()v / s remove()v / s hide()

时间:2012-08-31 07:03:02

标签: javascript jquery highcharts

我在页面中使用高级图表。这有点沉重。

当用户点击某个按钮时,它会动态加载高价图表,当用户点击close按钮时,它会删除/隐藏图表。

我想知道哪一个会更好。

  1. 用户点击时隐藏图表?是否会减慢页面的其余部分(因为重要的javascript和处理程序一起存在?)或者,

  2. remove()它,这样可以使页面变亮(但在这里,当用户再次点击按钮时,我需要再次加载图表)或

  3. 使用detach(),以便在重新加载highcharts时,它的工作速度更快 比remove()(但不会使页面像jQuery一样重 处理程序一直存在?)

  4. 我从jQuery文档中了解到,

    .remove()

      <。> .remove()方法从DOM中获取元素。使用.remove()时   你想要删除元素本身,以及内部的一切   它。除了元素本身,所有绑定事件和   与元素相关联的jQuery数据将被删除。

    .detach()

      

    .detach()方法与.remove()相同,但.detach()除外   保持所有jQuery数据与删除的元素相关联。这个   当要删除的元素要重新插入时,方法很有用   以后的DOM。

    .hide()

      

    匹配的元素将立即隐藏,无动画。   这大致相当于调用.css('display','none')

2 个答案:

答案 0 :(得分:6)

如果您只想隐藏/显示某个对象,请使用jQuery .hide().show()。这是最简单的,只要你要保持对象,你也可以使用.hide().show()。除非对象消耗大量内存,否则它应该不是问题。

.remove()(稍后保存然后将相同的对象重新插入DOM中)将对您没什么用处,因为它会破坏与该对象关联的一些数据,因此您可能无法轻松将其重新插入页面。

.remove()你实际上让垃圾收集器破坏了前一个对象,然后你再次需要时从头开始重新创建它是最节省内存的操作,但除非它消耗大量内存或你有一个很多人(例如成千上万),这样做可能只是做更多的工作而没有任何有意义的好处。

.detach()(虽然稍后保存然后将相同的对象重新插入DOM中)会起作用,但它比.hide().show()更有效,而且说实话,我宁愿怀疑你会发现两种选择之间存在差异。

答案 1 :(得分:5)

3将触发渲染和重绘,因此,如果您关心性能,请选择.hide(),因为它将“节省”一些dom操作(并且可能重绘2次)。不要忘记图表上的听众。

但是,我发现效果.addClass('hidden').removeClass('hidden'),使用css规则(.hidden {display: none})效果最佳。 (只要你没有隐藏滚动)。