用Javascript/JQuery动态替换HTML,这是一种枯燥的方法
我对前端开发有点陌生,我经常遇到的一个问题是在使用JS/JQuery动态生成HTML时不要重复我自己用Javascript/JQuery动态替换HTML,这是一种枯燥的方法,javascript,jquery,html,dry,Javascript,Jquery,Html,Dry,我对前端开发有点陌生,我经常遇到的一个问题是在使用JS/JQuery动态生成HTML时不要重复我自己 让我们考虑一个DOM对象,它具有多个状态。通常,使用JS所要做的就是从一种状态切换到另一种状态。但是通过在DOM对象上调用html(),可以在几个不同的位置(以及在JS文档中)编写相同的html代码。那么干的方法是什么呢 基本上,我想做的是,在我的HTML文档中为每个状态预先编写一个DOM示例(不改变文档结构),然后能够用我想要的状态的示例替换我的DOM。javascript中有不同类型的模板引
让我们考虑一个DOM对象,它具有多个状态。通常,使用JS所要做的就是从一种状态切换到另一种状态。但是通过在DOM对象上调用
html()
,可以在几个不同的位置(以及在JS文档中)编写相同的html代码。那么干的方法是什么呢
基本上,我想做的是,在我的HTML文档中为每个状态预先编写一个DOM示例(不改变文档结构),然后能够用我想要的状态的示例替换我的DOM。javascript中有不同类型的模板引擎。举几个mustache.js的例子,下划线.js有模板,jquery也有模板(但jquery版本从未通过测试版)
当使用JavaScript做更复杂的事情时,你也可以考虑使用像BooBo.js、SAMYY.JS或KokOut.js这样的框架(还有很多)。这些框架还大量使用模板(它们使用上面提到的模板)。您有多种选择: 对于简单对象,可以为每个状态的HTML创建一个变量,然后使用.wrap()函数(与.append()或.HTML()链接)来更新DOM 对于更复杂的DOM对象或交互,请使用JS模板系统:jquery模板()或handlebar()。我强烈推荐后者,因为助手使它非常强大
var state1= $(HTMLRootElement).detach();
$(document.body).append(state2);
只要不丢失对state1变量的引用(否则它将被垃圾收集),您可以稍后执行以下操作:
var state2= $(HTMLRootElement).detach();
$(document.body).append(state1);
这样,HTML元素仍然存在于内存中,它们只是不存在于DOM树上
另一种方法是简单地.hide()和.show()显示所讨论的内容。使用.detach()可以选择将所需状态的元素附加到网页的另一个位置,而不是将其固定(如在另一个div中)。重写DOM实际上需要完成多少工作?一种干法更改页面外观和属性的技术是保持一致的结构,但更改DOM的类定义。这允许您完全重新设置页面样式。还可以使用.hide()和.show()隐藏和显示元素。这就避免了必须将大块代码写入DOM。相反,您会有选择地对DOM进行重新序列化和隐藏/显示,就像您应该让DOM生成一样,并切换类以显示/隐藏DOM的相关部分,而不是每次都尝试重建相同的区域。