jqueryajax不能返回XML的问题

如果返回的是个XML字符流而不是XML文件还是要将其转换为XML对象才可正常解析。

如下:

var xmlObject = new ActiveXObject(“Msxml.DOMDocument”);

xmlObject.async = false; 

xmlObject.loadXML(message);

$(xmlObject).find(“op”).each(function(){

  var ss = $(this).text();

  var aa = ss.split(“|”);

  var key = aa[0];

  var name = aa[1];

});

记得将datatype:xml修改成datatype:html

利用DOM来处理XML文档(zz)

XML文件1
< xml version=”1.0″ standalone=”yes”  >
<Tree>
<TreeNode>
<NodeId>0</NodeId>
<Title>代號 </Title>
<NodeXmlSrc>Content.xml</NodeXmlSrc>
</TreeNode>
<TreeNode>
<NodeId>0</NodeId>
<Title>品牌</Title>
<NodeXmlSrc>BrandList.xml</NodeXmlSrc>
</TreeNode>
<TreeNode>
<NodeId>0</NodeId>
<Title>型體</Title>
<NodeXmlSrc>SpecContent.xml</NodeXmlSrc>
</TreeNode>
<TreeNode>
<NodeId>0</NodeId>
<Title>客戶</Title>
<NodeXmlSrc>BuyerList.xml</NodeXmlSrc>
</TreeNode>
<TreeNode>
<NodeId>0</NodeId>
<Title>規格</Title>
<NodeXmlSrc>SpecList.xml</NodeXmlSrc>
</TreeNode>
<TreeNode>
<NodeId>0</NodeId>
<Title>中國</Title>
<NodeXmlSrc>aa.xml</NodeXmlSrc>
</TreeNode>
</Tree>

XML文件2
< xml version=”1.0″ standalone=”yes”  >
<Tree>
<TreeNode NodeId=”0″ Title=”客戶” NodeXmlSrc=”BuyerList.xml”></TreeNode>
<TreeNode NodeId=”0″ Title=”品牌” NodeXmlSrc=”Sample.xml”></TreeNode>
<TreeNode NodeId=”0″ Title=”型體” NodeXmlSrc=”msdnlib587_.xml”></TreeNode>
<TreeNode NodeId=”0″ Title=”規格” NodeXmlSrc=”msdnlib3_.xml”></TreeNode>
<TreeNode NodeId=”0″ Title=”代號” NodeXmlSrc=”msdnlib3_.xml”></TreeNode>
<TreeNode NodeId=”0″ Title=”產地” NodeXmlSrc=”msdnlib587_.xml”></TreeNode>
<TreeNode NodeId=”0″ Title=”中國” NodeXmlSrc=”123456.xml”></TreeNode>
</Tree>

我說的是它們的結構,為什麼不一樣,但是出到一個TABLE里面卻是一樣的啊,
文件2變成文件1的形式

两个文件的结构明显不同么,还用说有什么不同吗?
主要的问题是如何转换。
可以用DOM解析第二个文件,然后再构造出第一个文件。

try:
/*** a.htm ***/
<SCRIPT LANGUAGE=”javaScript”>
function transXML()
{
var oXML, oXSL ;
var sXML ;

oXML= new ActiveXObject(“MSXML2.DOMDocument.3.0”) ;
oXSL= new ActiveXObject(“MSXML2.DOMDocument.3.0”) ;
oXML.async = false ;
oXML.load(“a.xml”) ;
oXSL.async = false ;
oXSL.load(“a.xsl”) ;

alert(oXML.xml);//转换前

sXML= oXML.transformNode(oXSL)

alert(sXML);//转换后
}

function window.onload()
{
transXML();
}
</SCRIPT>

/*** a.xml ***/
< xml version=”1.0″ encoding=”utf-8″  >
<Tree>
<TreeNode NodeId=”0″ Title=”客戶” NodeXmlSrc=”BuyerList.xml”></TreeNode>
<TreeNode NodeId=”0″ Title=”品牌” NodeXmlSrc=”Sample.xml”></TreeNode>
<TreeNode NodeId=”0″ Title=”型體” NodeXmlSrc=”msdnlib587_.xml”></TreeNode>
<TreeNode NodeId=”0″ Title=”規格” NodeXmlSrc=”msdnlib3_.xml”></TreeNode>
<TreeNode NodeId=”0″ Title=”代號” NodeXmlSrc=”msdnlib3_.xml”></TreeNode>
<TreeNode NodeId=”0″ Title=”產地” NodeXmlSrc=”msdnlib587_.xml”></TreeNode>
<TreeNode NodeId=”0″ Title=”中國” NodeXmlSrc=”123456.xml”></TreeNode>
</Tree>

/*** a.xsl ***/
< xml version=”1.0″ encoding=”utf-8″  >
<xsl:stylesheet version=”1.0″ xmlns:xsl=”http://www.w3.org/1999/XSL/Transform“>
<xsl:output method=”xml” encoding=”utf-8″ indent=”yes”/>

<xsl:template match=”/”>
<Tree>
<xsl:apply-templates select=”Tree/TreeNode” />
</Tree>
</xsl:template>

<xsl:template match=”TreeNode”>
<xsl:element name=”{name()}”>
<xsl:for-each select=”@*”>
<xsl:element name=”{name()}”>
<xsl:value-of select=”.” />
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>

</xsl:stylesheet>

在/Tree/TreeNode下,
“XML文件1″以element来描述当前TreeNode的各特性
“XML文件2″以attribute来描述当前TreeNode的各特性
这导致结构差异

element和attribute在DOM中都可定义为XmlNode但NodeType不同,其内容处理方式也有不同

常用正则整理

一种简单的正则表达式验证工具:浏览器的地址栏!

输入javascript:/^\s*$/.test(” “); 回车后,得到true;

输入javascript:/^\s*$/.test(“0”); 回车后,得到false。

常用正则:

javascript:/^\s*$/.test(" ");
javascript:/^\d+$/.test("0123456789");
javascript:/^[1-9]\d*$/.test("1234567890");
javascript:/^- ( :\d+|\d{1,3}( :,\d{3})+)( :\.\d+) $/.test("-233,323,432.323456");
javascript:/^- ( :\d+|\d{1,3}( :\.\d{3})+)( :,\d+) $/.test("232.232.292,2533");
javascript:/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test("2008-11-29");
javascript:/^\d\d \.\d\d \.\d\d\d \d $/.test("11.29.2008");

email

8./^((([a-z]|\d|[!#\$%&'\*\+\-\/=\ \^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\ \^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a)) (\x20|\x09)+) (([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a)) (\x20|\x09)+) (\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\. $/i.test(email);

url

9./^(https |ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@) (((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\. )(:\d*) )(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*) ) (\ ((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\ )*) (\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\ )*) $/i.test(url);

参考:jquery.validate.js

以前写的多选日期控件,给大家分享下

今天整理资料发现了!还是以前写的,刚刚接触的jquery。和大家分享下思路

function Calendar(config){

	config=config||{};
	if((typeof config)!="object"){
		return;
	}
	for(var p in config){
		this[p]=config[p];
	}
	this.datas=new Map();
	//this.datasId="guestCalendar";
	this.selectDay=null;
	this.selectTime=null;
	this.selectKey=null;
	var DOC=document,getElement=function(id){return DOC.getElementById(id);};
	//对应的ids 0 显示年的  1 显示 月的 2 显示天的
	this.calendarIds=['easyJsYear','easyJsMonth','easyJsShowDate'];
	this.init=function(){
		var d=new Date();
		this.currentMonth=d.getMonth()+1;
		this.currentYear=d.getFullYear();
		d=null;
	};
	this.initShowCalendar=function(){
		this.year=this.currentYear;
		this.month=this.currentMonth;
		this.showYearMonth();
		this.showDate();
	};
	//o {year:2011} or {month:10}
	this.changeShowCalendar=function(o){
		var obj=o;
		if(obj.year){
			if(this.year+obj.year<1990){
				return;
			}
			this.year=this.year+obj.year;
		}
		if(obj.month){
			if(this.month+obj.month>12||this.month+obj.month<1){
				return;
			}
			this.month=this.month+obj.month;
		}
		this.showYearMonth();
		this.showDate();
	};
	this.showYearMonth=function (){
		$("#"+this.calendarIds[0]).html(this.year+"年");
		$("#"+this.calendarIds[1]).html(this.month+"月");
	};
	this.showDate=function(){		
		var y = this.year, m = this.month;
		//判断当月有跨越几周
		var week=Math.ceil((new Date(y, m, 0).getDate() + new Date(y, m - 1, 1).getDay()) / 7);
		//当月开始是星期几
		var start_week=new Date(y, m - 1, 1).getDay();
		//当月结束是星期几
		var end_week=new Date(y, m, 0).getDay();
		//当前月有多少天
		var lastDate=new Date(y, m, 0).getDate();
		
		var tempdate=0,vName=this;		
		var parent=getElement(this.calendarIds[2]);
		removeAllNodes(this.calendarIds[2]);
		for(var i=0;i<week;i++){
			var tr=DOC.createElement("tr");
			for(var ii=0;ii<7;ii++){
				var td=DOC.createElement("td");
				td.className="nEasyJsWeekTd";
				tr.appendChild(td);
				if(i==0){
					if(ii<start_week){
						continue;
					}					
				}else if(i==(week-1)){
					if(ii>end_week){
						continue;
					}
				}
				tempdate++;
				var tkey=parseInt(""+this.year+(this.month.toString().length>1 this.month:"0"+this.month)+(tempdate.toString().length>1 tempdate:"0"+tempdate));
				if(this.datas.containsKey(tkey)){
					td.className="sEasyJsWeekTd";
				}
				td.onclick = function(o){vName.chanageDate(this);};//兼容ie6
				td.innerHTML=tempdate;					
			}
			parent.appendChild(tr);
		}	
		
	};
	this.GenerateCalender=function(){
		DOC.write('<div id="easyJsCalendarDate" class="easyJsCalendarDate" style="display:none">');
		DOC.write('<div class="easyJsYearMonth"><table width="100%" border="0" cellspacing="1" cellpadding="1"><tr><td onclick="'+this.varName+'.changeYear(-1)">&lt;&lt;</td><td onclick="'+this.varName+'.changeMonth(-1)">&lt;</td><td id="easyJsYear"></td><td id="easyJsMonth"></td><td onclick="'+this.varName+'.changeMonth(1)">&gt;</td><td onclick="'+this.varName+'.changeYear(1)">&gt;&gt;</td></tr></table></div>');
		DOC.write(' <div class="easyJsWeek"><table width="100%" border="0" cellspacing="1" bgcolor="#CCCCCC" cellpadding="1"><tr><th scope="col">日</th><th scope="col">一</th><th scope="col">二</th><th scope="col">三</th><th scope="col">四</th><th scope="col">五</th><th scope="col">六</th></tr><tbody id="easyJsShowDate"></tbody>');
		DOC.write('<tr><td onclick="'+this.varName+'.showToday()" colspan="3">今天</td><td onclick="'+this.varName+'.closeDateWindow()" colspan="3">关闭</td><td onclick="resetCalendarTimeForm()">c</td></tr></table></div></div>');
	};
	this.changeMonth=function(type){
		this.changeShowCalendar({month:type});
	};
	this.changeYear=function(type){
		this.changeShowCalendar({year:type});
	};
	this.showToday=function(){
		this.initShowCalendar();
	};
	this.closeDateWindow=function(){
		$("#easyJsCalendarDate").hide();
	};
	
	this.setDatasInPage=function(){
		var d=this.datas;
		var s=this.datas.toString(
			function(key,values){				
				return values;	
			}
		);
		var enter=getElement(this.enter);
		if(enter.nodeName=='INPUT'){
			enter.value=s;
		}else
		  enter.innerHTML=s;
	};
	this.clearTimePickerSelect=function(){
		for(var i=0;i<24;i++){
			this.selectTime.splice(i,1,-1);
		}
		var table=getElement("easyJsCalendarTimeTable");
		for(var j=0;j<4;j++){
			var tr=table.rows[j];
			for(var k=0;k<6;k++){
				tr.cells[k].className="cEasyJsCalenderTimeTd";
			}
		}
	};
	
	this.setStyleProperty=function(o,name,value){
		o.style[name]=value;
	};
	this.chanageDate=function(o){
		this.selectDay=o;
		var tmonth=this.month.toString().length>1 this.month:"0"+this.month,tday=this.selectDay.innerHTML.length>1 this.selectDay.innerHTML:"0"+this.selectDay.innerHTML;
		this.selectKey=parseInt(this.year+""+tmonth+""+tday);
		var selectValue=this.year+"-"+tmonth+"-"+tday;
		if(this.datas.containsKey(this.selectKey)){
			this.selectTime=this.datas.get(this.selectKey);
			this.datas.remove(this.selectKey);
			this.selectDay.className="nEasyJsWeekTd";
		}else{
			this.datas.modify(this.selectKey,selectValue,true);
			this.selectDay.className="sEasyJsWeekTd";
		}
		this.setDatasInPage();
	};

	this.triggerEvent=function(){
		if(this.trigger){
			var t=this;
			$("#"+this.trigger).click(function(e) {
             $("#easyJsCalendarDate").css("position","absolute").css("top", e.pageY+ "px").css("left", e.pageX + "px");
			 t.showDatePicker();
         	});			
		}
	};
	this.showDatePicker=function(id){
		$("#easyJsCalendarDate").show();
	};
	this.putDatas=function(){
		if(this.dataMaps){
			this.dataMaps.put(this.dataKey,this.datas);
		}
	}
	this.setDates=function(key){
		if(!this.dataMaps){
			this.dataMaps=new Map();
		}
		this.dataKey=key;
		if(this.dataMaps.containsKey(key)){
			this.datas=this.dataMaps.get(key);
		}else{
			this.datas=new Map();
		}		
	}
	this.GenerateCalender();
	this.init();
	this.initShowCalendar();
	this.triggerEvent();
}

下面是用的的相关function

/*
 * Map对象,实现Map功能
 *
 *
 * size() 获取Map元素个数
 * isEmpty() 判断Map是否为空
 * clear() 删除Map所有元素
 * put(key, value) 向Map中增加元素(key, value)  
 * remove(key) 删除指定key的元素,并返回该key的value
 * get(key) 获取指定key的元素值value
 * modify(key,value,auto) 修改key的value.如果auto为true,key不存在,会将key和value添加为新值;为false,key不存在将不进行添加
 * containsKey(key) 判断Map中是否含有指定key的元素
 * containsValue(value) 判断Map中是否含有指定value的元素
 * keys() 获取Map中所有key的数组(array)
 * values() 获取Map中所有value的数组(array)
 *
 */



function Map(){
	/**
	 *初始化datas
	 */
	this.initialize=function(){
		this.datas=new Object();
	}
	
	/**  
     * 得到datas中的对象数目  
     */  
    this.size=function() {     
        var i = 0;
        for(var ele in this.datas) {   
            i ++;   
        }   
        return i;   
    };  
	this.isEmpty=function(){
		return this.size()>0 false:true;
	};
	this.clear=function(){		
        for(var key in this.datas) {   
            delete this.datas[key];   
        }   
	};
	this.put=function(key, value) {
		return this.datas[key] = value;
	}
	this.remove=function(key) {
    	var value = this.datas[key];
    	delete this.datas[key];
    	return value;
    };
	this.get=function(key) {
		if (this.datas[key] !== Object.prototype[key])
		  return this.datas[key];
	};
	this.modify=function(key,value,auto){
		if(this.containsKey(key)){
			this.remove(key);
			this.put(key,value);
		}else{
			if(auto){
				this.put(key,value);
			}
		}
	};
	this.containsKey=function(key){
		if(key in this.datas){
			return true;
		}
		return false;
	};
	this.containsValue=function(value){
		var r=false;
		for(var key in this.datas){
			if(this.datas[key]==value){
				r=true;
				break;
			}
		}
		return r;
	}
	this.keys=function() {
		return this.pluck('key');
	};
	this.values=function() {
		return this.pluck('value');
	};
	
	/**  
     * 遍历Map,执行处理函数   
     * @param {Function} 回调函数 function(arrary){..}  
     */  
	this.each=function(fn){
		for (var key in this.object) {
		  var value = this.object[key], pair = [key, value];
		  pair.key = key;
		  pair.value = value;
		  fn(pair);
		}
	};
		
	/**  
     * 返回object的对象的复制  
     */ 	
	this.toObject=function(){
		var destination={};
		for (var property in this.datas)
			destination[property] = this.datas[property];
		return destination;
    };
	
	this.pluck=function(property) {
		var results = [];
		for(var key in this.datas){
			if(property=='key'){
				results.push(key);
			}else if(property=='value'){
				results.push(this.datas[key]);
			}
		}
		return results;
	};
	
	
	
       
    /**  
     * toString方法 
	 * fn是调用函数
     */  
    this.toString=function(fn) {   
        var b = this.datas;   
        var buf = [];   
        for(var key in b) {   
            buf.push(fn(key,b[key]));    
            buf.push('\n');   
        }   
        return buf.join('');   
    };
	
	this.formatToString=function(fn){
		var keys=this.keys();
		//function sortNumber(a,b){return a - b} 从小到大 ;function sortNumber(a,b){return b - a} 从大到小
		keys.sort(function sortNumber(a,b){return a - b});
		var buf=[];
		for(var i=0;i<keys.length;i++){
			buf.push(fn(keys[i],this.datas[keys[i]]));
			buf.push("\n");
		}
		return buf.join('');
	};
	
	this.initialize(); 
}

function StringBuffer(){
	
	this.array=[];
	this.append=function(string){
		this.array.push(string);
	}
	this.toString=function(){
		return this.array.join("");
	}
}
//删除该id下的所有节点
function removeAllNodes(id){
	var parent=document.getElementById(id);
    while(parent.childNodes.length>0) {
        parent.removeChild(parent.childNodes[0]);
    }
}

在页面调用

<body>
<textarea id="guestCalendar"  style="height:100px; width:200px;"></textarea>
<input id="trigger" value="日期" type="button"/>
<script>


var datePicker=new Calendar({
	enter:'guestCalendar',//显示值的的id  
	trigger:"trigger"  //触发控件id,该控件要支持click
});
</script>
</body>

300+Jquery,CSS,MooTools和JS的导航菜单

引用
如果你是网站前端开发人员,那么对你来说,也许做一个漂亮导航菜单会很得心应手。但今天我要为大家总结各种导航菜单的资源,以便让大家的网站前端开发的工作更方便更快速,只要选择现成的例子就可以应用于自己的网站了。我收集的这些资源,从非常简单的HTML和CSS导航菜单,到非常复杂和高级的JQuery、JavaScript和MooTools技术,这都可以让你轻松实现褪色、滑动、拖动等效果。

http://article.yeeyan.org/view/47543/19224 from_com 并对其中一种效果进行了整理:已作为附件上传。

EASYUI表单扩展

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml”>

<head>

<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />

<title>禁止访问</title>

<script type=”text/javascript” src=”jquery-1.4.4.min.js”></script>

<script type=”text/javascript” src=”jquery.easyui.min.js”></script>

<link rel=”stylesheet” type=”text/css” href=”themes/default/easyui.css”>

<link rel=”stylesheet” type=”text/css” href=”themes/icon.css”>

<script>

<!– 导入jquery.js  和easy_ui.js 自定义自己的 JS  家庭地址 是验证密码的–>

$(function(){

  $(‘#uiform input’).each(function () {

            if ($(this).attr(‘required’) || $(this).attr(‘validType’))

                $(this).validatebox();

        })

});

$.extend($.fn.validatebox.defaults.rules, {

    CHS: {

        validator: function (value, param) {

            return /^[\u0391-\uFFE5]+$/.test(value);

        },

        message: ‘请输入汉字’

    },

    ZIP: {

        validator: function (value, param) {

            return /^[1-9]\d{5}$/.test(value);

        },

        message: ‘邮政编码不存在’

    },

    QQ: {

        validator: function (value, param) {

            return /^[1-9]\d{4,10}$/.test(value);

        },

        message: ‘QQ号码不正确’

    },

    mobile: {

        validator: function (value, param) {

            return /^((\(\d{2,3}\))|(\d{3}\-)) 13\d{9}$/.test(value);

        },

        message: ‘手机号码不正确’

    },

    loginName: {

        validator: function (value, param) {

            return /^[\u0391-\uFFE5\w]+$/.test(value);

        },

        message: ‘登录名称只允许汉字、英文字母、数字及下划线。’

    },

    safepass: {

        validator: function (value, param) {

            return safePassword(value);

        },

        message: ‘密码由字母和数字组成,至少6位’

    },

    equalTo: {

        validator: function (value, param) {

            return value == $(param[0]).val();

        },

        message: ‘两次输入的字符不一至’

    },

    number: {

        validator: function (value, param) {

            return /^\d+$/.test(value);

        },

        message: ‘请输入数字’

    },

    idcard: {

        validator: function (value, param) {

            return idCard(value);

        },

        message:’请输入正确的身份证号码’

    }

});

/* 密码由字母和数字组成,至少6位 */

var safePassword = function (value) {

    return !(/^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\ \\\/\’\”]*)|.{0,5})$|\s/.test(value));

}

var idCard = function (value) {

    if (value.length == 18 && 18 != value.length) return false;

    var number = value.toLowerCase();

    var d, sum = 0, v = ’10×98765432′, w = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2], a = ‘11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91’;

    var re = number.match(/^(\d{2})\d{4}(((\d{2})(\d{2})(\d{2})(\d{3}))|((\d{4})(\d{2})(\d{2})(\d{3}[x\d])))$/);

    if (re == null || a.indexOf(re[1]) < 0) return false;

    if (re[2].length == 9) {

        number = number.substr(0, 6) + ’19’ + number.substr(6);

        d = [’19’ + re[4], re[5], re[6]].join(‘-‘);

    } else d = [re[9], re[10], re[11]].join(‘-‘);

    if (!isDateTime.call(d, ‘yyyy-MM-dd’)) return false;

    for (var i = 0; i < 17; i++) sum += number.charAt(i) * w[i];

    return (re[2].length == 9 || number.charAt(17) == v.charAt(sum % 11));

}

var isDateTime = function (format, reObj) {

    format = format || ‘yyyy-MM-dd’;

    var input = this, o = {}, d = new Date();

    var f1 = format.split(/[^a-z]+/gi), f2 = input.split(/\D+/g), f3 = format.split(/[a-z]+/gi), f4 = input.split(/\d+/g);

    var len = f1.length, len1 = f3.length;

    if (len != f2.length || len1 != f4.length) return false;

    for (var i = 0; i < len1; i++) if (f3[i] != f4[i]) return false;

    for (var i = 0; i < len; i++) o[f1[i]] = f2[i];

    o.yyyy = s(o.yyyy, o.yy, d.getFullYear(), 9999, 4);

    o.MM = s(o.MM, o.M, d.getMonth() + 1, 12);

    o.dd = s(o.dd, o.d, d.getDate(), 31);

    o.hh = s(o.hh, o.h, d.getHours(), 24);

    o.mm = s(o.mm, o.m, d.getMinutes());

    o.ss = s(o.ss, o.s, d.getSeconds());

    o.ms = s(o.ms, o.ms, d.getMilliseconds(), 999, 3);

    if (o.yyyy + o.MM + o.dd + o.hh + o.mm + o.ss + o.ms < 0) return false;

    if (o.yyyy < 100) o.yyyy += (o.yyyy > 30   1900 : 2000);

    d = new Date(o.yyyy, o.MM – 1, o.dd, o.hh, o.mm, o.ss, o.ms);

    var reVal = d.getFullYear() == o.yyyy && d.getMonth() + 1 == o.MM && d.getDate() == o.dd && d.getHours() == o.hh && d.getMinutes() == o.mm && d.getSeconds() == o.ss && d.getMilliseconds() == o.ms;

    return reVal && reObj   d : reVal;

    function s(s1, s2, s3, s4, s5) {

        s4 = s4 || 60, s5 = s5 || 2;

        var reVal = s3;

        if (s1 != undefined && s1 != ” || !isNaN(s1)) reVal = s1 * 1;

        if (s2 != undefined && s2 != ” && !isNaN(s2)) reVal = s2 * 1;

        return (reVal == s1 && s1.length != s5 || reVal > s4)   -10000 : reVal;

    }

};

</script>

</head>

<body>

<table class=”grid” id=”uiform”>

<tr><td>登录名:</td><td><input  required=”true” id=”txtUsername” type=”text” class=”txt03″ /></td><td>真实姓名:</td><td><input id=”txtTruename” validType=”CHS” required=”true” type=”text” class=”txt03″ /></td></tr>

<tr><td>登录密码:</td><td><input validType=”safepass”  required=”true” id=”txtPassword” name=”password” type=”password” class=”txt03″ /></td><td>Email:</td><td><input id=”txtEmail” name=”email”  validType=”email” type=”text” class=”txt03″ /></td></tr>

<tr><td>身份证号:</td><td><input validType=”idcard” id=”txtIdcard” name=”idcard” type=”text” class=”txt03″ /></td><td>QQ:</td><td><input validType=”QQ” id=”txtQq” name=”qq” type=”text” class=”txt03″ /></td></tr>

<tr><td>手机:</td><td><input validType=”mobile” id=”txtMobile” name=”mobile” type=”text” class=”txt03″ /></td><td>电话:</td><td><input id=”txtTel” name=”tel” type=”text” class=”txt03″ /></td></tr>

<tr><td>家庭住址:</td><td colspan=”3″><input validType=”equalTo[txtMobile]” style=”width:80%” id=”txtHomeaddr” name=”homeaddr” type=”text” class=”txt03″ /></td></tr>

<tr><td>备注:</td><td colspan=”3″> <input type=”text” style=”width:80%” class=”txt03″ id=”txtRemark”></textarea></td></tr>

<tr><td>&nbsp;</td><td colspan=”3″><input id=”Checkbox1″ type=”checkbox” /><label>超级管理员</label>&nbsp;&nbsp;<input id=”Checkbox2″ type=”checkbox” /><label>禁用</label></td></tr>

</table

</body>

</html>

JavaScript代码在IE和Firefox间的区别

1. HTML 对象的 id 作为对象名的问题

  IE:HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用

  FF:不支持

  解决方法:使用document.getElementById替代document.all

  2. 如果控件只有name,没有id, 用getElementById时:

  IE:可以找到对象

  FF:返回NULL

  解决方法:所有控件必须设置ID属性

  3. Evel:

  IE:支持,利用 eval(idName) 可以取得 id 为 idName 的 HTML 对象

  FF:不支持。

  解决方法:统一使用getElementById(idName) 代替 eval(idName)。

  4. Event:

  IE:用全局对象window.event

  FF:event只能在事件发生的现场使用,在调用函数时传入event对象

  解决方法:使用之前做一下浏览器类型判断,各用各的。

  5. 对象名称中美元符号‘$’改为使用下划线‘_’

  6. 集合类对象问题

  IE:可以使用()或[]获取集合类对象

  FF:只能使用[]获取集合类对象

  现有代码中存在许多,不能在 FF 下运行

  解决方法:统一使用[]获取集合类对象。document.form.item(“itemName”) 这样的语句改为document.form.elements[“elementName”]

  7. 变量名与某 HTML 对象 id 相同的问题

  IE:不能使用与 HTML 对象 id 相同的变量名

  FF:可以使用

  解决方法:在声明变量时,一律加上 var ,以避免歧义,这样在 IE 中亦可正常运行。

  此外,最好不要取与 HTML 对象 id 相同的变量名,以减少错误。

  8. Event定位问题

  IE:支持event.x 和event.y

  FF:支持event.pageX和event.pageY

  解决方法,统一使用event.clientX和event.clientY,但是在FF中event.clientX 与 event.pageX 有微妙的差别(当整个页面有滚动条的时候),不过大多数时候是等效的。如果要完全一样,可以判断浏览器类型后对应使用。

  9. 父结点的问题

  IE:parentElement parentElement.children

  FF:parentNode parentNode.childNodes

  childNodes的下标的含义在IE和FF中不同,FF使用DOM规范,childNodes中会插入空白文本节点。一般可以通过node.getElementsByTagName()来回避这个问题。

  当html中节点缺失时,IE和FF对parentNode的解释不同,例如

 


 <form> 
<table
  <input/> 
</table> 
</form>

 

  IE:input.parentNode的值为空节点

  FF:input.parentNode的值为form

  FF中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node)

  10. const 问题

  现有问题:

  IE:不支持 const 关键字。如 const constVar = 32; 在IE中这是语法错误。

  FF:支持

  解决方法:不使用 const ,以 var 代替。

  11. body 对象

  IE:在body标签完全被读入之后才存在

  FF:在body标签没有被浏览器完全读入之前就存在

  12. 自定义属性问题

  IE:可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性

  FF:只能使用getAttribute()获取自定义属性.

  解决方法:统一通过getAttribute()获取自定义属性

  13. event.srcElement问题

  IE:even.srcElement

  FF:even.target

  解决方法:使用时判断浏览器类型,各用各的。

  14. 模态和非模态窗口

  IE:支持模态和非模态窗口

  FF:不支持

  解决方法:直接使用window.open(pageURL,name,parameters)方式打开新窗口。如果需要将子窗口中的参数传递回父窗口,可以在子窗口中使用window.opener来访问父窗口。

  15. innerText

  IE:innerText

  FF:textContent

  16. 类似 obj.style.height = imgObj.height 的语句

  IE:有效

  FF:无效

  解决方法:统一使用obj.style.height = imgObj.height + ‘px’;

 

js实现多张图片切换效果

js实现多张图片切换效果

<script language=”JavaScript”>
var imgUrl=new Array();
var imgLink=new Array();
var imgText=new Array();
var picNum=0;
imgUrl[1]=”图片地址一”;
imgLink[1]=”链接1″;
imgText[1]=”标题或简介或其它HTML内容1″;
imgUrl[2]=”图片地址二”;
imgLink[2]=”链接2″;
imgText[2]=”标题或简介或其它HTML内容2″;
imgUrl[3]=”图片地址三”;
imgLink[3]=”链接3″;
imgText[3]=”标题或简介或其它HTML内容3″;
imgUrl[4]=”图片地址四”;
imgLink[4]=”链接4″;
imgText[4]=”标题或简介或其它HTML内容4″;
imgUrl[5]=”图片地址五”;
imgLink[5]=”链接5″;
imgText[5]=”标题或简介或其它HTML内容5″;

function NextPic(){
if(picNum<4) picNum++ ;//显示4个图片
else picNum=1;
if (document.all){
//下面注意,如果存在于FORM表单中,需要使用下面的方法,否则可直接使用name。
document.imgInit.filters.revealTrans.Transition=Math.floor(Math.random()*23);
document.imgInit.filters.revealTrans.apply();
document.imgInit.filters.revealTrans.play();
}
document.images.imgInit.src=”/blog/imgUrl[picNum]”;
//如果不是图片,而是SWF等,可做判断,内容可在程序中做好,再放于下面。
focustext.innerHTML='<a href=”/blog/+imgLink[picNum]+” target=_blank>’+imgText[picNum]+'</a>’;
//设置翻页时间
theTimer=setTimeout(‘NextPic()’, 3000);
}

function goUrl(){
window.open(imgLink[picNum],’_blank’);
}
</script>

HTML代码中:
可以做到控件中
<TABLE cellPadding=0 width=100% border=0>
<TR>
<TD align=middle height=”140″ >
<div align=’center’>
<a href=’javascript:goUrl()’><img style=”FILTER: revealTrans(duration=2,Transition=5)” src=”javascript:NextPic()” width=”170″ height=”120″ border=”1″ id=imgInit name=imgInit></a></TD></TR>
<TR><TD align=middle height=”38″ ><div name=focustext id=focustext align=’center’></div>
</div>
</TD></TR></TABLE>

VBS中使用WMI事件处理监控系统进程

OA项目中遇到这样一个问题:用户起草一种类型的公文,编辑word正文时希望能够将公文中的一些内容自动带到正文中,这个无非就是从服务器上把公文所对应的word正文文件下载到本地,替换掉里面指定内容的事,问题的关键在于替换掉内容后,或者用户填写了内容后,关闭word文件,如何监听此事件以在word程序退出后将此文件上传到服务器,不然,用户岂不是只是在本地做了修改,毫无用处。google了很久,终于解决了此问题,过程如下:

<html>
	<body onload="download(34567);init("C://Temp/" + 34567 + ".doc");replacefile();wordlistener();">
	</body>
</html>
<script language="javascript">
	//根据公文ID下载文件
	function download(objID){
		doDownload(objID);	
	}
	function upload(filepath){
		doUpload(filepath);	
	}
</script>
<script language="vbscript">  
	'定义变量 开始
	'定义操作word文件的相关变量
	Dim myDocApp
	Dim myDoc
	Dim objSelection
	Dim wordfilepath
	'定义变量 结束
	
	'初始化 开始
	'设置操作word文件的相关变量
	function init(filepath)
		Set myDocApp = CreateObject("Word.Application")
		myDocApp.Visible = True
		myDocApp.Activate
		myDocApp.Application.ScreenUpdating = False
		set myDoc = myDocApp.Documents.Open(filepath)
		Set objSelection = myDocApp.Selection
		Set wordfilepath = filepath
	end function
	'初始化 结束
	
	'替换文件使用VBS 开始
	'对下载到本地的公文模板进行内容替换
	function replacefile()
		replace "#departname#","办公室"
		replace "#username#","张三"
		replace "#createDate#","2009-12-17"
	end function
	'替换文件使用VBS 结束

	'替换函数 开始
	function replace(text,replacetext)
    With objSelection.Find
        .Text = text
        .Replacement.Text = replacetext
        .Forward = True
        .Wrap = 1
        .Execute ,,,,,,,,,,2
    End With
  end function
  '替换函数 结束 
  
  '监听系统进程的函数 开始
  function wordlistener()
		strComputer = "."
		Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
		Set objEventSource = objWMIService.ExecNotificationQuery _
		    ("SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_Process'")
		Do While True
		    Set objEventObject = objEventSource.NextEvent()
		    If Ucase(Left(objEventObject.TargetInstance.Name, 7)) = "WINWORD" Then
		    	Select Case objEventObject.Path_.Class
		        '如果是打开
		        'Case "__InstanceCreationEvent"
		        		'在这里添加事件处理代码
		        '如果是关闭
		        Case "__InstanceDeletionEvent"
		            '在这里添加事件处理代码 上传文件
		            upload wordfilepath
		            Exit Do
		    	End Select
		    End If
		Loop
	end function
	'监听系统进程的函数 结束 
</script>