我的html标记应该在客户端生成吗

Should my html markup be generated on the client side?

本文关键字:客户端 html 我的      更新时间:2023-09-26

我有一些服务器端代码,它输出项目的<ul>,用户可以编辑这些项目并将更改发布回服务器。我现在正在开发一个"添加新项目"功能,该功能将向<ul>添加一个新项目,并在单击"保存更改"按钮时将其发布回服务器。

当用户单击"添加新"按钮时,我执行客户端代码,该代码会附加<li>标记(与服务器端代码生成的标记相同)

让我烦恼的是裁员。这意味着,如果我应该更改<li>标记,我必须打开php和js文件才能进行更改。

为了消除冗余,我是否应该只从服务器输出<ul>数据,并让客户端代码生成标记?像这样的概念在性能上有哪些亮点?

您可以使用JQuery .clone()方法进行混合。

当后端代码创建初始代码时,它可以生成<li>元素的结构,然后,如果用户想添加新的<li>,您可以利用现有的.clone()it作为模板,用用户的新数据更新克隆的值,然后将其附加到<ul>

唯一的问题是,页面加载中可能没有任何<li>元素,因此.clone()调用将没有可引用的内容。如果这是一个问题,有一些方法可以解决(例如,你想使用的<li>格式的JS string模板,可以这样使用:var newLI = $(liTemplateString);。同样,这个模板可以由后端的相同代码创建,该代码将在页面加载时创建实际的<li>元素…它也只是创建一个JS变量。

除其他外,这将允许您立即将<li>更新到页面,然后使用Ajax将更新发送到后端,以更新"主"版本,而无需让用户等待该过程。

最后,我个人的偏好是让后端做尽可能多的处理,只有你的客户端代码来处理后端不能做的事情,所以如果后端可以在创建页面时完成,我会回避转储数据和让前端处理构建列表。

理论上,您可以毫无问题地附加新的<li>。但是,对于大多数用途,您希望服务器保存主副本,从而为每次更新重新提供整个<ul>

如果您使用的是.ajax(),这将是一个几乎无法估量的加载时间差异。

让我建议第三种方法:复制现有元素,并根据需要更改其属性和/或内容。

jQuery有.clone(),但它也可以用普通DOM或任何其他库来完成。

这样,您就不会添加不必要的延迟,并且可以使客户端代码相对独立于您可能需要做的任何标记更改。这意味着,如果你添加或更改任何与JS需要做的事情无关的标记(例如添加class=""或内部<span>),并且你的JS足够通用(例如获得要克隆的元素和从属性编辑其文本的元素),那么你就不需要更新它

相关文章: