我正在寻求关于这个主题的意见,如下所述。特别是我正在寻找关于如何动态构建HTML的“最着名的方法”或设计模式。
对我来说,这是一项非常常见的任务: 通过POST向服务器提交内容 - >以JSON格式获取结果列表 - >取这个0到n结果的列表并显示它们,通常作为列表。这通常意味着在Javascript(jQuery)中构建实际的HTML,例如:
HTMLResult = "<div id=.... "
HTMLResult = HTMLResult + JSONDataElement
HTMLResult = "</div>"
...
然后我使用jQuery添加每个元素或将它们捆绑起来并替换某个容器div的HTML。
我厌倦了这样做。它容易出错,丑陋,低效等等......
我宁愿做更多事情。 也许元素将以某种方式定义 - 它是在div,span,它包含什么......所以我可以做这样的事情:
tempElement = new Element
tempElement.text = JSONData.text
ResultsList.addElement(tempElement)
我正在寻求更好的方法来做我所描述的任何意见。我更喜欢最小的工具集:HTML,CSS,jQuery。
(还有在后端构建HTML,在本例中是Django)?
答案 0 :(得分:2)
克隆元素应该非常快,所以我有时会做的是包含要在初始页面中生成的元素的模板,display: none
。然后,当我从服务器接收数据时,我可以
var newElement = $('#some-template').clone().removeAttr('id');
然后,这取决于必须更换多少。有时我只是设置所需的属性并设置文本等,有时候我在模板中有占位符,就像
newElement.html(newElement.html().supplant(paramObj));
其中paramObj
包含替换占位符的值,supplant
取自Crockford。当然,修改String原型并非没有问题,但在这种情况下,可以通过使用函数轻松避免。
答案 1 :(得分:1)
我不会在服务器上生成HTML。
答案 2 :(得分:0)
为什么不考虑使用目标Dom Element的参数和要添加的数据编写泛型函数?你可以想到一个通用的方法,如:
function GenericAjaxResponseHandler(TargetElement, AjaxResponse)
{
//Implemet the handler here
}
答案 3 :(得分:0)
正如您所提到的,创建新元素的最简单方法是在后端,您可以完全控制纯HTML中的创建。在客户端,您必须以编程方式创建所有这些元素。但是,此方法的最大缺点是您要杀死JSON提供程序的可重用性。
如果您对数据可重用性,RESTful类似系统和OOP元素创建感兴趣,我建议Dean Edward's Base JS class,简化JavaScript中的OOP ,可以帮助您创建自定义元素和构建器。
使用 Base ,您可以创建一个简单的类层次结构,使您的代码可读和可维护。
如果您关注的是jQuery元素创建效率,请阅读此question