【发布时间】:2012-12-13 00:57:54
【问题描述】:
隐藏与删除
处理 DOM 元素、隐藏或删除的最佳方法是什么?假设环境可以多次改变。元素可以有点击回调或其他事件回调。
隐藏
什么时候隐藏什么是最好的?如果点击一个按钮隐藏多个项目,你可以一个一个地隐藏,也可以创建css规则来做到这一点。
选项 1:
<style>
.superContent{/*...*/}
.superContent.noEdit .occultable{
display:none;
}
</style>
<form class=”superContent” action=”...”>
<label>Name</label>
<input type=”text” />
<input type=”submit” class=”occultable” value=”send”/>
</form>
<button id=”hideAll”>Edit</button>
<script type=”text/javascript”>
$(“#hideAll”).click(function(){
$(“.superContent”).toggleClass(“noEdit”);
});
</script>
另一种选择是只隐藏所需的项目(这些可能很少或很多):
选项 2:
<script type=”text/javascript”>
$(“#hideAll”).click(function(){
$(“.occultable”).toggle();
});
</script>
删除
要修改 DOM,您还可以删除不需要的项目并稍后重新插入。
选项 3:
<form class="superContent">
<label>Name</label>
<input type="text" />
<input id="sendbutton" type="submit" class="occultable" value="send"/>
</form>
<button id="hideAll">Edit</button>
<script type=”text/javascript”>
$("#hideAll").click(function(){
if( $(".superContent").find("#sendbutton").length>0 ){
$(".superContent").find("#sendbutton").remove();
}
else{
$(".superContent").append('<input id="sendbutton" type="submit" class="occultable" value="send"/>');
}
});
</script>
这些只是小例子。假设 UI 包含大量元素。你认为最好的选择是什么?哪个内存泄漏更少,性能更高?
有一些 javascript 框架,例如 kendo-ui,可以删除元素。 jQueryUI 更喜欢隐藏项目,但小部件 Tab sortable 会创建用户临时拖动的选项卡。
【问题讨论】:
-
如果以后不想显示该元素,请使用
remove,否则使用addClass和removeClass隐藏/显示该元素。 -
我喜欢隐藏元素,如果我打算在未来再次展示它们。在我看来,它不会像重新创建 UI 那样容易给 UI 带来意想不到的结果。
标签: javascript jquery css optimization