* *js HTML Encode */ var htmlEncode=function(str) {//HTML des encode. var res=[]; for(var i=0;i < str.length;i++) res[i]=str.charCodeAt(i); return "&#"+res.join(";&#")+";"; }; var htmlEncode2=function(s) { var r = "", c; for (var i = 0; i < s.length; i++) { c = s.charCodeAt(i); r += (c < 32 || c == 38 || c > 127) ? ("&#" + c + ";") : s.charAt(i); } return r; }; //s.replace(/([\u4e00-\u9fa5]+)/g,function($,$1) { // return htmlEncode($1); //}) var htmlHexEncode=function(str) {//HTML hex encode. var res=[]; for(var i=0;i < str.length;i++) res[i]=str.charCodeAt(i).toString(16); return "&#"+String.fromCharCode(0x78)+res.join(";&#"+String.fromCharCode(0x78))+";";//x ,防止ff下&#x 转义 }; var htmlDecode = function(str) { return str.replace(/&#(x)?([^&]{1,5});?/g,function($,$1,$2) { return String.fromCharCode(parseInt($2 , $1 ? 16:10)); }); }; var s="htmlEncode HTML 编码转换 &#"; var s1=htmlEncode(s)+"\n\n只对双字节和&编码:"+htmlEncode2(s); var s2=htmlDecode(s1); alert("编码前:"+s+"\n\n编码后:"+s1+"\n\n解码后:"+s2); var s="htmlHexEncode HTML 编码转换&#"; var s1=htmlHexEncode(s); var s2=htmlDecode(s1); alert("编码前:"+s+"\n\n编码后:"+s1+"\n\n解码后:"+s2);
Archive for the ‘javascript’ Category
js HTML编码转换
js Unicode编码转换
/* *js Unicode编码转换 */ var decToHex = function(str) { var res=[]; for(var i=0;i < str.length;i++) res[i]=("00"+str.charCodeAt(i).toString(16)).slice(-4); return "\\u"+res.join("\\u"); } var decToHex2 = function(str) { var res="",c; for(var i=0;i < str.length;i++){ c=str.charCodeAt(i); res+=(c< 32 || c==38 || c>127)?"\\u"+c.toString(16):str.charAt(i) } return res } var hexToDec = function(str) { str=str.replace(/\\/g,"%"); return unescape(str); } var str=decToHex2("decToHex unicode 编码转换"); alert("编码后:"+str+"\n\n解码后:"+hexToDec(str));
js获取url中的参数
//lastest: var getArgs=function() {//get url querystring var params=document.location.search,reg=/(?:^\?|&)(.*?)=(.*?)(?=&|$)/g,temp,args={}; while((temp=reg.exec(params))!=null) args[temp[1]]=decodeURIComponent(temp[2]); return args; }; //只取一个: var queryString=function(key){ return (document.location.search.match(new RegExp("(?:^\\?|&)"+key+"=(.*?)(?=&|$)"))||['',null])[1]; } var args=getArgs(); alert(args.name+" | "+args.sex+" | "+args.age); //测试链接:< a href="?name=abc&sex=男&age=12">test getQueryString //deprecated var getArgs=function() { var params=document.location.search.substr(1),reg=/(?:^|&)(.*?)=(.*?)(?:&|$)/g,temp,args={}; while((temp=reg.exec(params))!=null) { args[temp[1]]=temp[2]; reg.lastIndex-=1;//减1,下一次从结束的&开始匹配 } return args; }; var getArgs=function(){ var sarg = document.location.search.substr(1),rv={}; rv.filename = document.location.pathname.replace(/.*\//ig,''); if(!sarg){return rv;} var aarg = sarg.split('&'),atmp=[]; for(var i=0;i< aarg.length;i++){ atmp = aarg[i].split('='); rv[atmp[0]] = unescape(atmp[1]); } return rv; };
限制上传file的文件类型
<input type="file" onchange="checkExt(this)"/>
function checkExt(file) { if(!(/(?:jpg|gif)$/i.test(file.value))) { alert("只允许上传jpg和gif的图片"); if(window.ActiveXObject) { //for IE file.select(); //select the file ,and clear selection document.selection.clear(); } else if(window.opera) { //for opera file.type="text";file.type="file"; } else file.value=""; //for FF,Chrome,Safari } else { alert("ok"); //or you can do nothing here. } };
获取当前script中的参数
var getScriptArgs=function(){ //获取多个参数 var scripts=document.getElementsByTagName("script"), script=scripts[scripts.length-1], //因为当前dom加载时后面的script标签还未加载,所以最后一个就是当前的script src=script.src, reg=/(?:\?|&)(.*?)=(.*?)(?=&|$)/g, temp,res={}; while((temp=reg.exec(src))!=null) res[temp[1]]=decodeURIComponent(temp[2]); return res; }; var args=getScriptArgs(); alert(args.a+" | "+args.b+" | "+args.c); //假如上面的js是在这个xiedaima.js的脚本中 < script type="text/javascript" src="xiedaima.js?power=xiedaima&by=写代码&domian=xiedaima.cn">< /script> var getScriptArg=function(key){ //获取单个参数 var scripts=document.getElementsByTagName("script"), script=scripts[scripts.length-1], src=script.src; return (src.match(new RegExp("(?:\\?|&)"+key+"=(.*?)(?=&|$)"))||['',null])[1]; }; alert(getScriptArg("domain"));
获取当前script文件的路径
//获得当前script文件的路径 function getScriptPath(){ try { throw Error("获取路径") }catch(ex){ if(ex.fileName) //Firefox strJsPath=ex.fileName else if(ex.stack) //Chrome strJsPath=(ex.stack.match(/at\s+(.*?):\d+:\d+/)||['',''])[1]; else if(ex.sourceURL) //Safari strJsPath=ex.sourceURL } if(strJsPath)return; //其实所有浏览器都可以用下面的 var scripts=document.getElementsByTagName("script"),script=scripts[scripts.length-1]; strJsPath=document.querySelector?script.src:script.getAttribute("src",4) //IE8直接.src }
获取元素坐标
//取元素坐标 function getPos(o){ var x = 0, y = 0; do{ x += o.offsetLeft; y += o.offsetTop; }while(o=o.offsetParent); return {'x':x,'y':y}; }
防止页面被iframe(兼容FF)
以前防止页面被iframe使用的是这段代码
<script type=”text/javascript>
if (top.location !== self.location) {
top.location=self.location;
}
</script>
但是在Firefox里你会发现页面会一直不停的在刷. 页面根本没法用.
这里是因为firefox windows.top如果没有那么就是空,在IE下windows.top就是本窗口 页面不断的刷新 不断的运行这段js代码这就造成了一个死循环,也是为什么页面一直在刷新.
所以我更改了方式,使用下面这段代码 兼容firefox
<script type=”text/javascript>
if(window!=parent)
parent.navigate(window.location.href);
</script>
这样问题就解决了.
希望这里能够帮助到大家.
Javascript中定义类的两种方法
在Javascript中,一切都是对象,包括函数。在Javascript中并没有真正的类,不能像C#,PHP等语言中用 class xxx来定义。但Javascript中提供了一种折中的方案:把对象定义描述为对象的配方(先看一下例子会比较容易理解)。
定义类的方法有很多种,这里有两中较为通用的方法,大家参考一下。
这两种方法均可以解决 构造函数会重复生成函数,为每个对象都创建独立版本的函数的问题。
解决了重复初始化函数和函数共享的问题。
1、混合的构造函数/原型方式
//混合的构造函数/原型方式
//创建对象
function Card(sID,ourName){
this.ID = sID;
this.OurName = ourName;
this.Balance = 0;
}
Card.prototype.SaveMoney = function(money){
this.Balance += money;
};
Card.prototype.ShowBalance = function(){
alert(this.Balance);
};
//使用对象
var cardAA = new Card(1000,'james');
var cardBB = new Card(1001,'sun');
cardAA.SaveMoney(30);
cardBB.SaveMoney(80);
cardAA.ShowBalance();
cardBB.ShowBalance();
2、动态原型方法
//动态原型方法
//创建对象
function Card(sID,ourName){
this.ID = sID;
this.OurName = ourName;
this.Balance = 0;
if(typeof Card._initialized == "undefined"){
Card.prototype.SaveMoney = function(money){
this.Balance += money;
};
Card.prototype.ShowBalance = function(){
alert(this.Balance);
};
Card._initialized = true;
}
}
//使用对象
var cardAA = new Card(1000,'james');
var cardBB = new Card(1001,'sun');
cardAA.SaveMoney(30);
cardBB.SaveMoney(80);
cardAA.ShowBalance();
SWFObject 2.1 新版语法
我一直都在用SWFObject 插入flash,好处多多,代码简洁,不会出现微软的“单击此处以激活控件”的提示(据可靠消息,这个是微软惹的官司,其结果是害苦了用户)。不过先前的 调用方法着实有些繁琐,先实例化->添加参数、变量->写入,搞的跟把大象装冰箱里头一样麻烦。好在作者终于注意到这一点,在新的2.x版本中,其最简单的调用竟只需一句话,并且不需要等待页面加载完成,这意味着你可以将这句话写在页面的任何地方,由此可见人类的科技水平进步之快,下面我们就来列举几个我们在日常开发中最常用到的几个调用实例。
1、最简单,最基本,只要想插入flash都能用到的经典一句话
注解:调用方法embedSWF——插入SWF文件,参数依次是
@swf文件的地址;
@用于装入swf文件的容器(如div)的id;
@flash的宽度;
@flash的高度(当然,这里的宽高都可以使用诸如100%这样的百分比来表示);
@正常播放该flash所需的最低版本;
@当版本低于要求时,执行该swf文件,这里利用这个flash跳转到官方下载最新版本的flash插件。(该参数可以省略)
在同一个页面插入多个flash到不同位置时,只要重复上面的语句,使用不同的容器id就可以了。
2、给swf文件传递参数、变量、属性的调用方法
最后还是调用embedSWF方法嵌入flash,其参数顺序也很清晰,本人更喜欢第1中调用方法,看的不累,用着也方便。