Javascript中实现JS文件的导入+命名前缀

 Javascript不比Java,没有import关键字(据说Javascript2.0将加入Import和命名空间)。在网上查了很多别 人写的Import函数的代码,通常都是直接在HTML里插入script元素来实现。这种方式无法实现同步导入,即import函数调用的下面无法马上 使用导入JS里面的变量。

下面的代码将使用AJAX方式来实现Import功能,可以实现同步导入。调用方式很简单,在JS代码开始处调用$import()函数就可以了。

另外本代码还集成了CSS的导入,虽然很简单但也很有用。因为如果你编写了一个JS文件来实现某种控件,你肯定不希望使用你的JS文件的人还要在他自己的代码里引入你的CSS文件。所以你可以使用本代码里的$import函数在你的JS文件中引用你的CSS文件。

最后,本代码还提供了一个很振奋的功能,即为你导入的JS文件中的全局变量加上命名前缀。我们在很多高级语言中都可以做到这一点,如引用JAVA的JSP标签库,<%@ taglib uri="http://java.sun.com/jsp/jstl/core " prefix="c"%>,这个库里面的内容可以用前缀C与其他标签库区分开来。本代码也提供了类似的功能,如:$import("../lib/head.js","h")。之后就可以用h.XXX来引用head.js里定义的函数和变量了。

代码如下:

/**
 * 这个JS文件提供了命名空间、JS文件导入功能。 注:import本身是个关键字,不能用来做变量函数名
 * 通过本代码可以导入Javascript文件,可以使用绝对URL和相对URL作为路径 $import("../lib/head.js");
 * $import("head.js"); 可以导入CSS文件 $import("head.css");
 * 导入Javascript文件时,可以为导入文件里所定义的全局变量增加前缀,如: $import("prototype.js","p"); var
 * mydiv = p.$("myDiv");
 * 但只有用var定义的全局变量和全局函数将增加前缀,而没有用var定义的变量将被视为必须要为全局的变量,不增加前缀
 * 
 * @author 由月
 */
var Import = {};

Import.importedJSFiles = [];
Import.importingJSFiles = [];
Import.importedCSSFiles = [];

Import.$import = function(url, prefix) {
	// 检查参数合法
	if (url == null || url == "")
		return;
	// 获取导入文件的完整URL
	var fullUrl = Import.getFullPathFromUrl(url);
	// 先将此URL放入正在导入的列表中
	Import.addImportingFile(fullUrl);
	// 判断导入的是JS文件还是CSS文件
	if(Import.getFileType(fullUrl) == ".js"){
		Import.importJS(fullUrl, prefix);
	} else {
		Import.importCSS(fullUrl);
	}
	// 将URL从正在导入列表中移除,并加入已导入列表
	Import.addImportedFile(fullUrl);
};
Import.importCSS = function(url) {
	// 检查此文件是否已经被导入过
	if (Import.isImported(url))
		return;
	var head = document.getElementsByTagName("head")[0];
	// IE6 cannot support appendchild for head when BASE tag is present.
	// So we have to use document.write as instead.
	// We need better solution for this IE bug.
	// var link = head.appendChild(document.createElement("link"));
	var link = document.createElement("link");
	link.href = url;
	link.type = "text/css";
	link.rel = "stylesheet";
	if (document.readyState == "complete") {
		// if this method is called after the page loaded, for example,
		// in a script with defer tag, then use appendChild,
		// otherwise the document will be cleared when invoking
		// document.write.
		head.appendChild(link);
	} else {
		document.write(link.outerHTML);
	}

};
Import.importJS = function(url, prefix) {
	// 检查此文件是否已经被导入过
	if (Import.isImported(url))
		return;
	// 通过AJAX获取文件内容
	// alert(url);
	var script = Import.getScriptContent(url);
	// alert(script);
	// 加上命名空间并执行脚本
	Import.execute(script, prefix);
};
Import.execute = function(script, prefix) {
	if (prefix != null &amp;&amp; prefix != "") {
		var variables = Import.analysScript(script); // 分析出脚本中所有的全局变量
		if (variables.length &gt; 0) {
			var pre = eval(prefix + " = {};"); // 根据prefix生成对象
			for ( var i = 0; i &lt; variables.length; i++) {
				var variable = variables[i];
				// alert(variable);
				pre[variable] = null;
			}
			var extendScript = "; var pre="
					+ prefix
					+ ";for(var attr in pre){try{pre[attr]=eval(attr);}catch(e){}}";
			var wholeScript = "(function(){" + script + extendScript + "})();";
			window.execScript(wholeScript);
		}
	} else {
		window.execScript(script);
	}
};
Import.analysScript = function(script) {
	// 检查参数
	if (script == null || script == "")
		return null;

	var globalVariables = null;
	// 定义词法状态机
	var wordStateMachine = {
		currentState : "init", // 状态机的当前状态
		wordCache : [], // 保存用来构造单词的缓存
		stateObj : {}, // 保存状态间变量
		getStateObj : function(state) {
			if (state &amp;&amp; state != "") {
				if (this.stateObj[state] == null)
					this.stateObj[state] = {};
				return this.stateObj[state];
			}
			return null;
		},
		process : function(script) {
			var self = this;
			var index = 0;
			var outputWords = [];
			while (index &lt; script.length) {
				var c = script.charAt(index);
				var result = "self";
				var word = self.wordCache.join("");
				while (result == "self") { // 继续在当前字符上调用handler
					result = self.handlers[self.currentState](c);
				}
				if (result == "complete") { // 完成了一个单词的分析
					// alert(word);
					var output = grammarStateMachine.process(word);
					if (output != null) {
						// alert("output:" + output);
						outputWords[outputWords.length] = output;
					}
				} else if (result == "next") { // 读取下一个字符
					self.wordCache[self.wordCache.length] = c;
					index++;
				}
			}
			return outputWords;
		},
		handlers : {
			"init" : function(char) {
				wordStateMachine.wordCache = [];
				if ("$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
						.indexOf(char) &gt;= 0) {
					// if(char == "$")alert(char);
					wordStateMachine.currentState = "identify_start";
				} else if ("{}()".indexOf(char) &gt;= 0) {
					wordStateMachine.currentState = "block_start";
					return "self";
					/*
					 * } else if ("\"'".indexOf(char) &gt;= 0) { //
					 * 暂时取消字符串分析,因为不好处理正则表达式中的'和" wordStateMachine.currentState =
					 * "quote_start";
					 * wordStateMachine.getStateObj("quote_start").quote = char;
					 * return "next";
					 */
				} else if (char == "/") {
					wordStateMachine.currentState = "comment";
					return "next";
				}
				return "next";
			},
			"identify_start" : function(char) { // 进入标识符分析
				var result = "self";
				if ("$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"
						.indexOf(char) &gt;= 0) {
					result = "next";
				} else if ("".indexOf(char) &gt;= 0) {

				} else {
					wordStateMachine.currentState = "identify_finish";
					result = "self";
				}
				return result;
			},
			"identify_finish" : function(char) { // 标识符分析完成
				var result = "complete";
				wordStateMachine.currentState = "init";
				return result;
			},
			"block_start" : function(char) { // 分析括号和代码块
				wordStateMachine.currentState = "block_finish";
				return "next";
			},
			"block_finish" : function(char) {
				wordStateMachine.currentState = "init";
				return "complete";
			},
			"quote_start" : function(char) { // 分析引号
				// alert(char + "," + wordStateMachine.wordCache.join(""));
				var finish = false;
				if (char == wordStateMachine.getStateObj("quote_start").quote) {
					for ( var i = wordStateMachine.wordCache.length - 1; i &gt;= 0; i = i + 2) {
						var a = wordStateMachine.wordCache[i];
						var b = wordStateMachine.wordCache[i - 1];
						if (a != "\\") {
							finish = true;
							break;
						} else if (b != "\\") {
							finish = false;
							break;
						}
					}
					if (finish) {
						wordStateMachine.currentState = "quote_finish";
						return "self";
					}
				}
				return "next";
			},
			"quote_finish" : function(char) {
				alert(char + "," + wordStateMachine.wordCache.join(""));
				wordStateMachine.currentState = "init";
				return "next";
			},
			"comment" : function(char) { // 分析注释
				if (char == "/") {
					wordStateMachine.currentState = "comment_start";
					wordStateMachine.getStateObj("comment").comment = "line";
				} else if (char == "*") {
					wordStateMachine.currentState = "comment_start";
					wordStateMachine.getStateObj("comment").comment = "block";
				} else {
					wordStateMachine.currentState = "regex";
				}
				return "self";
			},
			"comment_start" : function(char) {
				// alert(char+","+wordStateMachine.wordCache.join(""));
				if (wordStateMachine.getStateObj("comment").comment == "line"
						&amp;&amp; char == "\n") {
					wordStateMachine.currentState = "comment_finish";
				} else if (wordStateMachine.getStateObj("comment").comment == "block"
						&amp;&amp; char == "/"
						&amp;&amp; wordStateMachine.wordCache[wordStateMachine.wordCache.length - 1] != "\\") {
					wordStateMachine.currentState = "comment_finish";
				}
				return "next";
			},
			"comment_finish" : function(char) {
				wordStateMachine.currentState = "init";
				return "next";
			},
			"regex" : function(char) {
				// TODO: 需要实现表达式分析才能分析出正则表达式
			wordStateMachine.currentState = "init";
			return "next";
		}
		}
	};
	// 定义语义状态机
	var grammarStateMachine = {
		currentState : "init",
		output : null,
		stateObj : {},
		getStateObj : function(state) {
			if (state &amp;&amp; state != "") {
				if (this.stateObj[state] == null)
					this.stateObj[state] = {};
				return this.stateObj[state];
			}
			return null;
		},
		process : function(word) {
			var self = this;
			var result = "self";
			var ret = null;
			while (result == "self") {
				result = self.handlers[self.currentState](word);
			}
			if (result == "next") {
			} else if (result == "complete") {
				ret = self.output;
				self.output = null;
			}
			return ret;
		},
		handlers : {
			"init" : function(word) {
				// alert("init:"+word);
				if (word == "var") {
					grammarStateMachine.currentState = "variable_define";
				} else if (word == "function") {
					grammarStateMachine.currentState = "function_define";
				} else if (word == "{") {
					grammarStateMachine.currentState = "block";
					grammarStateMachine.getStateObj("block").blockLevel = 0;
					return "self";
				}
				return "next";
			},
			"block" : function(word) {
				var stateObj = grammarStateMachine.getStateObj("block");
				if (word == "{") {
					stateObj.blockLevel++;
				} else if (word == "}") {
					stateObj.blockLevel--;
					if (stateObj.blockLevel == 0) {
						grammarStateMachine.currentState = "init";
					} else if (stateObj.blockLevel &lt; 0) {
						throw new Error("block unmatch");
					}
				}
				return "next";
			},
			"variable_define" : function(word) {
				grammarStateMachine.output = word;
				grammarStateMachine.currentState = "variable_finish";
				return "self";
			},
			"variable_finish" : function(word) {
				grammarStateMachine.currentState = "init";
				return "complete";
			},
			"function_define" : function(word) {
				if (word == "(") {
					grammarStateMachine.currentState = "function_arg_block";
					return "self";
				} else {
					grammarStateMachine.output = word;
					grammarStateMachine.currentState = "function_arg_block";
				}
				return "next";
			},
			"function_arg_block" : function(word) {
				if (word == "(") {
				} else if (word == ")") {
					grammarStateMachine.currentState = "function_search_body";
				}
				return "next";
			},
			"function_search_body" : function(word) {
				if (word == "{") {
					grammarStateMachine.currentState = "function_start";
					grammarStateMachine.getStateObj("function_start").blockLevel = 0;
					return "self";
				}
				return "next";
			},
			"function_start" : function(word) {
				var stateObj = grammarStateMachine
						.getStateObj("function_start");
				if (word == "{") {
					stateObj.blockLevel++;
				} else if (word == "}") {
					stateObj.blockLevel--;
					if (stateObj.blockLevel == 0) {
						grammarStateMachine.currentState = "function_finish";
						return "self";
					}
				}
				return "next";
			},
			"function_finish" : function(word) {
				// alert("function_finish:"+word)
			grammarStateMachine.currentState = "init";
			return "complete";
		}
		}
	};
	// 进入自动状态机
	globalVariables = wordStateMachine.process(script);
	return globalVariables;
};
Import.getScriptContent = function(url) {
	var req = new ActiveXObject("Microsoft.XmlHttp");
	var res;
	req.open("GET", url, false);
	req.send();
	if (req.status != 404) {
		if (req.readystate == 4) {
			res = req.responseText;
		}
	}
	return res;
};
Import.getFileType = function(url){
	url = url.split("?")[0];
	type = url.substring(url.length - 3);
	if(type.indexOf(".")==0){
		return type;
	}else{
		return "";
	}
}
/**
 * 记录下导入的文件
 */
Import.addImportingFile = function(url) {
	if (!Import.isImported(url)) {
		if(Import.getFileType(url) == ".js")
			Import.importingJSFiles.push(url);
		else
			Import.importingCSSFiles.push(url);
	}
};
Import.addImportedFile = function(url) {
	if (!Import.isImported(url)) {
		if(Import.getFileType(url) == ".js"){
			if(Import.importingJSFiles[Import.importingJSFiles.length - 1] == url){
				Import.importingJSFiles.pop();
				Import.importedJSFiles.push(url);
			}
		}else{
			Import.importedCSSFiles.push(url);
		}
	}
};
/**
 * 检查文件是否已经被导入过了
 */
Import.isImported = function(url) {
	if(Import.getFileType(url) == ".js"){
		for ( var i = 0; i &lt; Import.importedJSFiles.length; i++) {
			if (Import.importedJSFiles[i] == url) {
				return true;
			}
		}
	} else {
		for ( var i = 0; i &lt; Import.importedCSSFiles.length; i++) {
			if (Import.importedCSSFiles[i] == url) {
				return true;
			}
		}
	}
	return false;
};
/**
 * 获取导入文件的完整URL,包括HTTP头
 */
Import.getFullPathFromUrl = function(url) {
    var path = null;
    if (url.substr(0, 7).toLowerCase() == "http://") {
        // url为完整的URL地址
        path = url;
    } else if (url.substr(0, 1) == "/") {
        // url以/开头,为以站点根目录开始的路径
        path = "http://" + document.location.host + url;
    } else {
        var parentPage = document.location.href;
        var parentPath = parentPage.split("?")[0];
        parentPath = parentPath.substring(0, parentPath.lastIndexOf("/") + 1);
        var currentScriptPath = Import.getCurrentScriptPath();
        currentScriptPath = currentScriptPath.split("?")[0];
        if (currentScriptPath.toLowerCase().indexOf("http://") == 0) {
            // 当前脚本路径是以http开头
            path = currentScriptPath + url;
        } else {
            // 否则当前脚本路径为相对路径
            // 查看是否有BASE标签
            var base = document.getElementsByTagName("base")[0];
            if (base) {
                var baseUrl = base.href;
                path = baseUrl + currentScriptPath + url;
            } else {
                path = parentPath + currentScriptPath + url;
            }
        }
        path = Import.toAbsolutePath(path);
    }
    return path;
};

Import.toAbsolutePath = function(url) { // 转换为绝对URL
	var http = "http://";
	if (url.toLowerCase().indexOf("http://") == 0) {
		url = url.substring(7, url.length);
	}
	var path = url.split("?")[0];
	var queryString = (url.split("?").length &gt; 1) ? "?" + url.split("?")[1] : "";
	dt = path.split("/");
	var newdt = [];
	for ( var i = 0; i &lt; dt.length; i++) {
		var u = dt[i];
		if (u == "..") {
			newdt.pop();
		} else {
			newdt.push(u);
		}
	}
	return http + newdt.join("/") + queryString;
};

/**
 * 获取当前运行的脚本文件的路径,路径不包括自身的文件名
 * 
 * @return
 */
Import.getCurrentScriptPath = function() {
	var js = Import.importingJSFiles;
	if (js &amp;&amp; js.length &gt; 0) {
		js = js[js.length - 1];
		js = js.split("?")[0];
		js = js.substring(0, js.lastIndexOf("/") + 1);
	} else {
		js = document.scripts;
		var src = js[js.length - 1].src;
		src = src.split("?")[0];
		js = src.substring(0, src.lastIndexOf("/") + 1);
	}
	return js;
};
/**
 * ImportFile类
 * 
 * @param path
 * @return
 */
Import.ImportFile = function(path) {
	this.path = path;
	this.fullPath = null;
	this.type = null;
};

(function() {
	if (typeof $import == "undefined") {
		$import = Import.$import;
	}
})();
</textarea> </p>
					<p class="right articalinfo">

						发表于 @
						2009年09月21日 18:10:00&nbsp;&#124; <a id="a_comment" href="#FeedBack" title="评论">评论( <span
							id="FeedbackCount_4577121">loading...</span>

							<script type="text/javascript">
								AddFeedbackCountStack("4577121")
							</script>

							) </a>&#124; <span style="display: none;"><a class="a_edit" href="http://writeblog.csdn.net/PostEdit.aspx?entryId=4577121"
								title="编辑">编辑</a>&#124</span> <a href='m&#97;ilto&#58;webmaster&#64;csdn&#46;net?subject=Article%20Report!!!&body=Author:youyue%0D%0AURL:http://blog.csdn.net/ArticleContent.aspx?UserName=youyue&Entryid=4577121'>

									举报</a>&#124; <cite class="fav_csdnstylebykimi"><a href="JavaScript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'saveit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();"
										class="fav_csdnstylebykimi" title="收藏到我的网摘中,并分享给我的朋友">收藏</a> </cite>
					</p>
					<span id="Post.ascx_ViewPost_PreviousAndNextEntriesDown">
						<h3 class="pagego">
							<a href="/youyue/archive/2009/09/21/4577014.aspx">旧一篇:用wmlscript实现MD5和BASE64加密</a>&nbsp;|&nbsp;<a href="/youyue/archive/2009/09/22/4580402.aspx">新一篇: JAVA中文字符编码问题详解</a></h3>

					</span>
					<div style="text-align: left;">
						<!-- ca-pub-1076724771190722/blog_postpage_72890 -->
						<script type='text/javascript'>
							GA_googleFillSlot("blog_postpage_72890");
						</script>
					</div>
					<div class="mutualitys">
						<dl>
							<dt><span><a οnclick="LogClickCount(this,215)" target="_blank" href="http://blog.csdn.net">

								查看最新精华文章 请访问博客首页</a></span>相关文章</dt>
						</dl>
					</div>
				</div>
			</div>
			<a name="FeedBack"></a>

			<script type="text/javascript">
				var CurrentEntryId = '4577121';
				var CurArticleTitle = 'Javascript中实现JS文件的导入+命名前缀';
				var AllowComment = 'True';
				var AllowAnonymousComment = /^true$/i.test('False');
			</script>

			<div class="commentslist" id="commentslist">
			</div>

			<script type="text/javascript" src="/js/CsdnDialog.js"></script>

			<script type="text/javascript">
				function ChangeIdentifyingCode() {
					var url = $('#imgValidationCode').attr('src');
					if (!(/&d=[\d\.]+$/).test(url)) url += "&d=1";
					url = url.replace(/&d=[\d\.]+$/, "&d=" + Math.random());
					$('#imgValidationCode').attr('src', url);
				}

				function OpenLoginDialog() {
					element = document.getElementById("loginBtn");
					var position = absolutePoint(element);

					var dialogTop = position.y - 400;
					var dialogLeft = position.x - 220;
					var dialogWidth = 435;
					var dialogHeight = 420;

					showWindow({ url: 'http://passport.csdn.net/UserLogin.aspx?show=replyLogin&from=http%3a%2f%2fblog.csdn.net%2f!tools%2fLoginSussess.aspx'
						, title: '登录'
						, top: dialogTop
						, left: dialogLeft
						, width: dialogWidth
						, height: dialogHeight
					});
				}

				function closeDialog(needRefresh) {
					closeWindow();
					if (needRefresh) {
						var url = location.href;
						if ((/\?/g).test(url))
							url = url.replace(/\?.*$/g, ("?" + Math.random()).replace(/\./g, ""));
						else url += ("?" + Math.random()).replace(/\./g, "");
						location.href = url;
					}
					$("#SubmitFeedback").unbind("click");
					$("#SubmitFeedback").bind("click", PostContent);
				}

				function absolutePoint(element) {
					var result = { x: element.offsetLeft, y: element.offsetTop };
					element = element.offsetParent;
					while (element) {
						result.x += element.offsetLeft;
						result.y += element.offsetTop;
						element = element.offsetParent;
					}
					return result;
				}

				function startmarquee(lh, speed, delay, index) {
					var t;
					var p = false;
					var o = document.getElementById("marqueebox" + index);
					o.innerHTML += o.innerHTML;
					o.onmouseover = function () { p = true }
					o.onmouseout = function () { p = false }
					o.scrollTop = 0;
					function start() {
						t = setInterval(scrolling, speed);
						if (!p) o.scrollTop += 2;
					}
					function scrolling() {
						if (o.scrollTop % lh != 0) {
							o.scrollTop += 2;
							if (o.scrollTop >= o.scrollHeight / 2) o.scrollTop = 0;
						} else {
							clearInterval(t);
							setTimeout(start, delay);
						}
					}
					setTimeout(start, delay);
				}

				function addEventHandler(target, type, func) {
					if (target.addEventListener)
						target.addEventListener(type, func, false);
					else if (target.attachEvent)
						target.attachEvent("on" + type, func);
					else target["on" + type] = func;
				}

				addEventHandler(window, "load", function () {
					startmarquee(42, 50, 3000, 0);
				});
			</script>

			<div class="commentnew">
				<dl>

					<dt>
						<ul>
							<li class="left">发表评论</li>

							<script src="http://svc.csdn.net/ColumnService/RandomColumnContentJS.aspx?id=835ac618-5f1a-41b2-b4dc-716234f8d656&c=1&t=li"
								type="text/javascript"></script>

						</ul>
					</dt>
					<dd>

						<ul>
							<li class="lefttop">表 情:</li>
							<li class="right"><a href="#" οnclick="return false;">
								<img title="顶" alt="顶" class="brow" src="/images/emotions/e01.gif" /></a> <a href="#"
									οnclick="return false;">
									<img title="砸" alt="砸" class="brow" src="/images/emotions/e02.gif" /></a> <a href="#"
										οnclick="return false;">
										<img title="棒" alt="棒" class="brow" src="/images/emotions/e03.gif" /></a>
								<a href="#" οnclick="return false;">

									<img title="大笑" alt="大笑" class="brow" src="/images/emotions/e04.gif" /></a>
								<a href="#" οnclick="return false;">
									<img title="愤怒" alt="愤怒" class="brow" src="/images/emotions/e05.gif" /></a>
								<a href="#" οnclick="return false;">
									<img title="大哭" alt="大哭" class="brow" src="/images/emotions/e06.gif" /></a>
								<a href="#" οnclick="return false;">
									<img title="疑问" alt="疑问" class="brow" src="/images/emotions/e07.gif" /></a>
								<a href="#" οnclick="return false;">
									<img title="汗" alt="汗" class="brow" src="/images/emotions/e08.gif" /></a> <a href="#"
										οnclick="return false;">

										<img title="呕吐" alt="呕吐" class="brow" src="/images/emotions/e09.gif" /></a>
								<a href="#" οnclick="return false;">
									<img title="送花" alt="送花" class="brow" src="/images/emotions/e10.gif" /></a>
							</li>
						</ul>
						<ul>
							<li class="left">评论内容:</li>
							<li class="right">

								<textarea id="content" class="textarea" οnkeydοwn="if(event.ctrlKey && event.keyCode==13){return $('#SubmitFeedback').click();}"></textarea>
							</li>
						</ul>
						<div>
							<ul>
								<li class="left">用 户 名:</li>
								<li class="right"><span id="loginTips" class="right" style="display: none;"><a href="javascript:void(0);"
									οnclick="OpenLoginDialog(this);return false;" class="red" id="loginBtn">登录</a> <a
										href="http://passport.csdn.net/CSDNUserRegister.aspx" target="_blank" class="red">

										注册</a> </span><span class="right" style="display: none;">
											<input type="checkbox" id="anonymous" class="checkbox" />匿名评论 </span><span id="commentUser"
												class="left"></span></li>
							</ul>
						</div>
						<ul style="display: none;">
							<li class="left">验 证 码:</li>
							<li class="right">

								<input id="code" type="text" class="input" />
								<a href="javascript:ChangeIdentifyingCode()">
									<img id="imgValidationCode" alt="验证码" style="vertical-align: middle;" src="http://comments.blog.csdn.net/AntiBotImage.ashx?entryId=4577121" /></a>
								<a href="javascript:ChangeIdentifyingCode()">重新获得验证码</a> </li>
						</ul>
						<ul>
							<li class="left">&nbsp;</li>
							<li class="right">

								<input id="SubmitFeedback" type="button" value="发表评论" class="submitbtn" />
								
							</li>
						</ul>
					</dd>
					<dd id="recommended" class="recruit">
						<h5>热门招聘职位</h5>
						<ul id="marqueebox0">
							<script src="http://ping.csdn.net/rsscache.aspx?rssurl=http://temp.csdn.net/Feed.aspx?Column=3550748a-ac9a-4ff1-ba62-3739fce143ba&amp;count=12&amp;area=226" type="text/javascript"></script>

						</ul>
					</dd>
				</dl>
			</div>

<script type="text/javascript">
	function addEventHandler(target, type, func) {
		if (target.addEventListener)
			target.addEventListener(type, func, false);
		else if (target.attachEvent)
			target.attachEvent("on" + type, func);
		else target["on" + type] = func;
	}
	addEventHandler(window, "load", function () {
		({
			anndelay: 5000,
			annst: 0,
			annstop: 0,
			annrowcount: 0,
			anncount: 0,
			annrows: [],
			annstatus: 0,
			announcementScroll: function () {
				var self = this;
				var annlis = self.annbody.getElementsByTagName("li");
				if (self.annstop) {
					self.annst = setTimeout(function () { self.announcementScroll(); }, self.anndelay);
					return;
				}
				if (!self.annst) {
					var lasttop = -1;
					for (var i = 0; i < annlis.length; i++) {

						if (lasttop != annlis[i].offsetTop) {
							if (lasttop == -1) {
								lasttop = 0;
							}
							self.annrows[self.annrowcount] = annlis[i].offsetTop - lasttop;
							self.annrowcount++;
						}
						lasttop = annlis[i].offsetTop;
					}

					if (self.annrows.length == 1) {
						self.ann.onmouseover = self.ann.onmouseout = null;
					} else {
						self.annrows[self.annrowcount] = self.annrows[1];
						self.annbodylis.innerHTML += self.annbodylis.innerHTML;
						self.annst = setTimeout(function () { self.announcementScroll(); }, self.anndelay);
					}
					self.annrowcount = 1;
					return;
				}

				if (self.annrowcount >= self.annrows.length) {
					self.annbody.scrollTop = 0;
					self.annrowcount = 1;
					self.annst = setTimeout(function () { self.announcementScroll(); }, self.anndelay);
				} else {
					self.anncount = 0;
					self.announcementScrollnext(self.annrows[self.annrowcount]);
				}
			},
			announcementScrollnext: function (time) {
				var self = this;
				self.annbody.scrollTop++;
				self.anncount++;
				if (self.anncount != time) {
					self.annst = setTimeout(function () {
						self.announcementScrollnext(time);
					}, 10);
				} else {
					self.annrowcount++;
					self.annst = setTimeout(function () { self.announcementScroll(); }, self.anndelay);
				}
			},
			play: function () {
				var self = this;
				self.annbody = document.getElementById('annbody');
				if (!self.annbody) return;
				self.ann = document.getElementById('ann');
				self.annbodylis = document.getElementById('annbodylis');
				self.chal = document.getElementById('chal');
				if (!self.annbodylis.getElementsByTagName("li").length) return;
				self.chal.style.display = "";
				self.ann.onmouseover = function () { this.annstop = 1; };
				self.ann.onmouseout = function () { this.annstop = 0; };
				self.announcementScroll();
			}
		}).play();
	});
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值