在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封装成方法,这样就能提高代码的重用性,减少代码体积,也便于维护。
浙公网安备 33010602011771号