Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Javascript/JQuery动态替换HTML,这是一种枯燥的方法_Javascript_Jquery_Html_Dry - Fatal编程技术网

用Javascript/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中有不同类型的模板引

我对前端开发有点陌生,我经常遇到的一个问题是在使用JS/JQuery动态生成HTML时不要重复我自己

让我们考虑一个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的相关部分,而不是每次都尝试重建相同的区域。