在javascript中实现类似asp.net webcontrol中的render的方法
在asp.net中的webcontrol开发的时候采用render方法来呈现控件。在javascript中,对于一些html代码的拼接大多数情况下采用字符串相加的方式来处理,这样做有以下弊端:
1.可读性差,易出错,出错后不易发现。
2.在javascript最小化的时候,长长的字符串不能最下化。
于是在项目中我实现了累死render的方法来处理html代码的拼接。
StringBuilder = function () { var self = this, strs = []; self.append = function (str) { strs.push(str); }; self.toString = function () { return strs.join(""); }; self.dispose = function () { strs = null; }; }, TextElement = function (text) { this.text = text; this.render = function () { return this.text; }; }, HtmlElement = function (tagName, innerText, attributes) { var self = this, halfTags = { br: true, img: true, hr: true, input: true }; self.tagName = tagName || "div"; self.attributes = attributes || {}; self.innerText = innerText || ""; self.children = []; if ($.isPlainObject(innerText)) { self.innerText = ""; self.attributes = innerText; } self._isShortTag = false; if (halfTags[self.tagName] === true) { self._isShortTag = true; } self.render = function () { var sb = new StringBuilder(), html = ""; sb.append(self._renderBeginTag(self.tagName, self.attributes)); if (self.innerText !== "") { sb.append(self.innerText); } if (self.children.length > 0) { $.each(self.children, function (index, ele) { sb.append(ele.render()); }); } sb.append(self._renderEndTag(self.tagName)); html = sb.toString(); sb.dispose(); return html; }; self.add = function (ele) { this.children.push(ele); }; self._renderBeginTag = function (tagName, attributes) { var sb = new StringBuilder(), strRet = ""; sb.append("<"); sb.append(tagName); $.each(attributes, function (key, value) { sb.append(" "); sb.append(key); sb.append("="); sb.append("\""); sb.append(value.toString()); sb.append("\""); }); if (this._isShortTag) { sb.append(" "); } else { sb.append(">"); } strRet = sb.toString(); sb.dispose(); return strRet; }; self._renderEndTag = function (tagName) { var sb = new StringBuilder(), strRet = ""; if (this._isShortTag) { sb.append("/>"); } else { sb.append("</"); sb.append(tagName); sb.append(">"); } strRet = sb.toString(); sb.dispose(); return strRet; }; };
最上面上在javascript中实现了一个stringBuilder类。处理字符串拼接的。用户用的时候采用下面的方法来调用HtmlElement这个类
var div = new HtmlElement("div", {class:"divcss"}); var innertextbox = new HtmlElement("input", {type:"text"}); div.add(innertextbox); var str = div.render();
str得到的结果是
<div class="divcss"> <input type="text" /> </div>
在使用的时候可以将创建textbox以及一些常用的html element封装成方法,这样就能提高代码的重用性,减少代码体积,也便于维护。