惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
D
DataBreaches.Net
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
V
Visual Studio Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog RSS Feed
Recent Announcements
Recent Announcements
The Register - Security
The Register - Security
S
Secure Thoughts
Y
Y Combinator Blog
The Last Watchdog
The Last Watchdog
L
LINUX DO - 最新话题
V2EX - 技术
V2EX - 技术
腾讯CDC
GbyAI
GbyAI
G
Google Developers Blog
博客园 - 司徒正美
博客园 - 三生石上(FineUI控件)
T
The Exploit Database - CXSecurity.com
T
Threat Research - Cisco Blogs
P
Proofpoint News Feed
Schneier on Security
Schneier on Security
Microsoft Security Blog
Microsoft Security Blog
Jina AI
Jina AI
WordPress大学
WordPress大学
aimingoo的专栏
aimingoo的专栏
MyScale Blog
MyScale Blog
Help Net Security
Help Net Security
K
Kaspersky official blog
P
Privacy & Cybersecurity Law Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
AI
AI
MongoDB | Blog
MongoDB | Blog
Scott Helme
Scott Helme
J
Java Code Geeks
Engineering at Meta
Engineering at Meta
H
Heimdal Security Blog
H
Help Net Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
云风的 BLOG
云风的 BLOG
Microsoft Azure Blog
Microsoft Azure Blog
S
Security Affairs
TaoSecurity Blog
TaoSecurity Blog
The GitHub Blog
The GitHub Blog
Hacker News: Ask HN
Hacker News: Ask HN
Martin Fowler
Martin Fowler
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Project Zero
Project Zero
T
The Blog of Author Tim Ferriss
Last Week in AI
Last Week in AI

博客园 - dail

IE浏览器在虚拟机中无法正常显示字符 jQuery在updatepanel中使用造成内存泄露 在使用jQuery的时候不小心的内存泄漏 jQuery 1.7的隐藏改动 jQuery 1.6的变化 jQuery ui effects - dail jQuery ui 1.8.6 position 的一个bug 一个progressbar widget jQuery编写widget的一些窍门 jquery animate动画的特殊用法。 一个简单的widget Jquery ui widget中的_create(),_init(),destroy() Jquery ui widget开发 Jquery ui css framework jquery animate Json.net简单用法 EXTJS学习(二)Message EXTJS学习(一) jquery+linq制作博客(二)
在javascript中实现类似asp.net webcontrol中的render的方法
dail · 2011-07-21 · via 博客园 - dail

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