摘自js100例中一些很好的例子,加上自己的理解!

因为比较菜只能理解到这了;

function isLetters(str){
var re=/^[A-Za-z]+$/;
if(str.match(re)==null){
return false;
}else{
return true;
}
}
//这个也比较简单就匹配一下正则是绝对模式完全匹配
//------------------------------判断字符有没有A-z---------------//

function isNull(chars){
if(chars == null){
return true;
}
if(jsTrim(chars).length==0){
return true;
}
return false;
}
//jsTrim(chars)两边去掉空格以后的长度还是为0的话这个也表示为空
//---------------------判断字符是否为空---------------------------//

String.prototype.startWith=function(s){
return this.indexOf(s) == 0
}
//这个不比较简单就把需要判断的参数传入就ok了
//--------------------------------------判断是不是以某个字符开头------------------------//

function isValidReg(chars){
var re==/<|>|\[|\]|\{|\}|『|』|※|○|●|◎|§|△|▲|☆|★|◇|◆|□|▼|㊣|﹋|⊕|⊙|〒|ㄅ|ㄆ|ㄇ|ㄈ|ㄉ|ㄊ|ㄋ|ㄌ|ㄍ|ㄎ|ㄏ|ㄐ|ㄑ|ㄒ|ㄓ|ㄔ|ㄕ|ㄖ|ㄗ|ㄘ|ㄙ|ㄚ|ㄛ|ㄜ|ㄝ|ㄞ|ㄟ|ㄢ|ㄣ|ㄤ|ㄥ|ㄦ|ㄧ|ㄨ|ㄩ|■|▄|▆|\*|@|#|\^|\\/;
if(re.test(chars)==true){
return false;
}else{
return true;
}

}
//-------------------------这个其实就是一堆特殊字符的正则---------------------//

function isValidPost(chars){
var re=/^\d{6}$/;
if(chars.match(re)==null){
return false;
}else{
return true;
}
}
//---------------------判断是不是邮政编码-------------------------//

var ua = navigator.userAgent.toLowerCase();
var idIE6 = ua.indexOf("msie 6") > -1;
if(isIE6) {
try {
document.execCommand("BackgroundImageCache",false,true);
}catch(e){}
}
//navigator.userAgent.toLowerCase();对开发很重要这个可以判断用户在用什么浏览器
//不仅仅是判断ie6,可以判断用户的客户端是用手机还是电脑是安卓还是苹果;
//
//不用正则的话也可用indexOf这样输出判断是否等于-1;

//------------------------------是不是ie6----------------------------//

function isDigit(value){
var patrn = /^[0-9]*$/;
if(patrn.exec(value)==null || value == ""){
return false;
}else{
return true;
}
}
//这个例子最简单只是用了一个数字的正则表达式
//-----------------------------------判断是不是数字---------------------------------------//

String.prototype.endWith=function(s){
var d= this.length-s.length;
return (d>=0 && this.lastIndexOf(s)==d);
}
//这个比判断是不是首字母复杂一点 一个字符的长度不确定先用调用这个方法的字符
//的长度减去参数字符的长度得到的是前面的索引,然后判断我们的最后一个s的indexOf
//如果他们相等那么就证明我们传入的参数是该字符的结束,返回true如果不是返回false;

//---------------------------------是不是以摸个字符串结束------------------------//

function isURL(strUrl){
var regular = /^\b(((https?|ftp):\/\/)?[-a-z0-9]+(\.[-a-z0-9]+)*\.(?:com|edu|gov|int|mil|net|org|biz|info|name|museum|asia|coop|aero|[a-z][a-z]|((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]\d)|\d))\b(\/[-a-z0-9_:\@&?=+,.!\/~%\$]*)?)$/i;
//这个正则写起来很麻烦但是很好理解保存吧这个主要就是这个正则
if(regular.test(strUrl)){
return true;
}else{
return false;
}
}
//这个主要是正则如果test返回的和exce不一样exce返回的是一个数组比
//test复杂返回的是bool 如果匹配是true 如果不匹配回来的false;
//----------------------------判断是否为网址------------------------//

function AddFavorite(sURL,sTitle){
try {
window.external.addFavorite(sURL,sTitle);
}catch(e) {
try {
window.sidebar.addpanel(sTitle,sURL,"");
}catch(e){
alert("加入收藏失败,请使用Ctrl+D进行添加");
}
}
}
//这个收藏夹涉及到js中try和catch的用法 我们try是抛出我们想要的对象,然后catch
//来使用我们想要的对象external.addFavorite这个是由人为操作添加到收藏夹,
//.sidebar.addpanel是加入收藏夹的意思第一个时名称第二个是地址
//------------------------------------加入收藏夹--------------------------------------------//

function checkAll(){
var selectall = document.getElementById("selectall");
var allbox = document.getElementsByTagName("allbox");
if(selectall.checked){
for(var i=0;i<allbox.length;i++){
allbox[i].checked=true;
}
}else{
for(var i=0;i<allbox.length;i++){
allbox[i].checked=false;
}
}
}
//这个就很简单了
//-------------------------全选不全选---------------------------//

function uncheckAll(form){
for(var i=0;i<form.elements.length;i++){
var e = form.elements[i];
if(e.name !='chkall'){
e.checked=!e.checked;
}
}
}
//其实就是一个chkall 这个很简单
//------------------------取消选择的方法------------------------//

function removeUrlPrefix(a){
a=a.replace(/:/g,":").replace(/。/g,".").replace(///g,"/");
//这句话的意思是把中文的一些标识符给替换成英文的
while(trim(a).toLowerCase().indexOf("http://")==0){
a=trim(a.replace(/http:\/\//i,""));
//这里的意思时把http://用空替换掉;
}

return a;
}
//toLowerCase()是把我们传入的参数转换为小写

//--------------------------去掉url前缀--------------------------------------//

function addEventSamp(obj,evt,fn){
if(obj.addEVentListener){
obj.addEventListener(evt, fn false);
}else if(obj.attchEvent){
obj.attchEvent("on"+evt,fn);
}
}
//addEventListener为元素添加事件
//这也是为了兼容ie attchEvent事件的添加这是一个兼容的问题
//------------------------------------------兼容浏览器的绑定元素事件------------------------------//

function isValidLength(chars,len){
if(chars.length < len) {
return false;
}
retirm true;
}
//这个就很简单了 就是判断下长度
//------------------判断字符串是否大于规定的长度----------------------//

function isFloat(str){
for(var i=0;i<str.length;i++){
if((str.charAt(i)<"0" || str.charAt(i)>"9")&&str.charAt(i)!="."){
return false;

}
}
return true;
}
//这个方法就是遍历我们字符串中的每一个字符 用charAT(i)的方式拿到其中的每一个
//字符然后判断它是不是数字然后判断它是不是.就判断出了浮点数
//-----------------------判断一个数字时不是浮点数--------------------------//

function isEmail(str){
var re=/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
if(re.test(str)!=true){
return false;
}else{
return true;
}
}
//这个简单的就是一个邮箱的正则表达式剩下的都很简单
//-------------------------判断是不是邮箱---------------------//

function IsReverse(text){
return text.split("").reverse().join("");
}
//这个就是几个方法的应用很简单
//-----------------------实现字符串的反转-----------------------//

(function(){
var fn = function(){
var w = document.documentElement ? document.documentElement.clientWidth : document.body.clientWidth
,r = 1255
,b = Element.extend(document.body)
,classname = b.className;
if(w < r){
//当窗体的宽度小于1255的时候执行相应的操作
}else{
//当窗体的宽度大于1255的时候执行相应的操作
}
}
if(window.addEventListener){
window.addEventListener('resize', function(){ fn(); });
}else if(window.attachEvent){
window.attachEvent('onresize', function(){ fn(); });
}
fn();
})();
//兼容浏览器当窗口的大小改变的时候出发的事件
//-------------------------------改变窗体的事件--------------------------------------------//


String.prototype.trim = function(){
var reExtraSpace = /^\s*(.*?)\s+$/; //这个表达式仅仅是去掉开头和结尾的空格也就trim的用法
//这属于正则的严谨模式
return this.replace(reExtraSpace,"$1");
}

// var re = /(\w+)\s(\w+)/;
// var str = "John Smith";
// var newstr = str.replace(re, "$2, $1");
// // Smith, John
// console.log(newstr);
// 上面的例子让我们看的就更形象了replace替换两个字符的位子考的是匹配
//上面的第一个括号就代表了 $1 匹配的第二个括号就代表了$2 这样问就可以把他们颠倒
//\w 类似[A-Za-z0-9_] \s空白符
// 最重要的是一个括号将( 和 ) 之间的表达式定义为“组”(group),
//并且将匹配这个表达式的字符保存到一个临时区域
//(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。
//----------------------------清空空格的原生js事件------------------------------------//

function get_get(){
querystr = window.location.href.split("?");
if(querystr[1]){
GETs = querystr[1].split("&");
GET = new Array();
for(var i=0;i<GETs.length;i++){
tmp_arr=GETs[i].split("=");
key=tmp_arr[0];
GET[key]=tmp_arr[1]
}
}
return querystr[1];
}
//上面的分割方法太low了太死板了
function get_newget(str){
var reg = /(\?)(.*)/;
newstr=reg.exec(str)[0].replace(RegExp.$1,"");
//自己写的理解起来就是把我们的地址?号前面的都干掉,这个方法是用exec得到?+后面的表达式然后我们在用
//空替换掉我们字符串中的?号,$1代表的是第一个正则的匹配,正则万岁
//不用正则用indexOf的方法剪切字符串野可以substr
var obj = {};
var arr = newstr.split("&");
for(var i=0 ;i<arr.length ;i++){
var newarr=arr[i].split("=");
obj[newarr[0]]=newarr[1];
}
return obj;
}
//这样我们就得到了一个对象我们想点谁就点谁不要太happy
//-------------------------获取get提交的数据--------------------------//

function backTop(btnId){
var btn = document.getElementById(btnId);
var d = document.documentElement; //这里分别定义两个其实为了兼容问题他们都是一样的性质
var b = document.body;
window.onscroll = set; //页面卷曲事件一般用windos.onscroll
btn.style.display ="none";
btn.onclick=function(){
btn.style.display="none";
window.onscroll = null;
this.timer = setInterval(function(){
d.scrollTop -= Math.ceil((d.scrollTop+b.scrollTop)*0.1); //向上取整
b.scrollTop -= Math.ceil((d.scrollTop+b.scrollTop)*0.1);//这个技巧非常的榜我每次调用都是
//一个小数这样我必须执行向上取整的操作这样就达到了一种伪动画的效果
//其实他们都是同一个属性就是为了兼容问题然后当我们的值到达0的时候清除我们的setInterval
//这个方法简直神作啊第一次看到
if((d.scrollTop + b.scrollTop)==0){
clearInterval(btn.timer, window.onscroll = set);
}
},20)
}
}
function set() {
btn.style.display = (d.scrollTop + b.scrollTop > 100) ? 'block': "none"
}
};

backTop('goTop');

//这个方法非常的独特啊,使用 是一直调用clearInerval的方法实现了返回顶部,这个程序有个技巧如上
//页面存在DTD(DOCTYPE),使用document.documentEelement.scrollTop获取滚动条距离
//页面不存在DTD,使用document.documentElement.scrollTop 或 document.body.scrollTop都可以获取到滚动条距离
//-----------------------------返回顶部这个例子非常的有意思------------------------------------//

Date.prototype.format =function(format)
{
var o = {
"M+" : this.getMonth()+1, //month
"d+" : this.getDate(), //day
"h+" : this.getHours(), //hour
"m+" : this.getMinutes(), //minute
"s+" : this.getSeconds(), //second
"q+" : Math.floor((this.getMonth()+3)/3), //quarter
"S" : this.getMilliseconds() //millisecond
}
if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
(this.getFullYear()+"").substr(4- RegExp.$1.length));
for(var k in o)if(new RegExp("("+ k +")").test(format))
format = format.replace(RegExp.$1,
RegExp.$1.length==1? o[k] :
("00"+ o[k]).substr((""+ o[k]).length));
return format;
}
new Date().format("yyyy-MM-dd hh:mm:ss"); //这是它的应用方式
//这句话if(/(y+)/.test(format)) format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4- RegExp.$1.length));
//粗看的时候我很迷茫不知道是什么意思其实仔细看看大概就是匹配我们年的时候有仅仅是两位的状况RegExp.$1表示的是匹配的第一个
//正则括号中的内容(y+)匹配多次y,当我们的y是正常的4位的时候就会截取0个字符,当我们的y是2位的时候就会截取2位就是这个表示
//形式,就是看起来复杂罢了
//剩下的就是遍历我们的obj了 用for in 来把我们正则拼接起来 每个都是按照 obj中的key 来匹配如果他们的长度小于2位加0
//---------------------------另一种时间格式的匹配日期化-----------------------------//

function insertAfer(newChild,refChild){
var parElem= refChild.parentNode;//获取参数的父元素
if(parElem.lastChild==refChild){ //判断它是不是他的最后一个孩子
refChild.appendChild(newChild);
}else{
parElem.insertBefore(newChild,refChild.nextSibling)
}
}
//只有insertBefor的方法没有after的方法但是上面的方法还是有问题的有一定的
//兼容问题但是不重要这个我们现在用jq比这个强太多了
//---------------------------insertAfter的方法----------------------//

function cutstr(str,len){
var temp;
var icount=0;
var patrn =/[^\x00-\xff]/;
//匹配小写字母和汉子都会给匹配出来这里解释是大写字母是两个字节剩下的都是一个字节
var strre="";
for(var i=0;i<str.length;i++){
if(icount<len-1) {
//这里的理解是我传入的截取的长度不是0或者1
temp=str.substr(i,1);
if(patrn.exec(temp)==null){
//.exec的方法是用正则表达式在字符串中查找如果结果不是null返回一个数组,这里的意思是不是大写字母就加1
icount = icount + 1;
}else{
icount = icount + 2;
}
strre += temp;
} else {
break;
}
}
return strre + "";
}
//实测结束 确实是按照大写之母2个直接的方法截取的字符串
//-----------------------------------字符串长度的截取------------------------------//

Date.prototype.format = function(formatStr) {
var str = formatStr;
var week = ['日', '一', '二', '三', '四', '五', '六'];
str = str.replace(/yyyy|YYYY/,this.getFullYear());
str = str.replace(/yy|YY/,(this.getYear()%100>9?(this.getYear()%100).toString() : '0'+(this.getYear()%100).toString());
str = str.replace(/MM/,(this.getMonth()+1)>9 ? (this.getMonth()+1).toString():'0'+(this.getMonth()+1).toString());
str = str.replace(/M/g,(this.getMonth()+1)) ;
str = str.replace(/w|W/g,Week[this.getDay()]);
str = str.replace(/dd|DD/, this.getDate() > 9 ? this.getDate().toString() : '0' + this.getDate());
str = str.replace(/d|D/g, this.getDate());
str = str.replace(/hh|HH/, this.getHours() > 9 ? this.getHours().toString() : '0' + this.getHours());
str = str.replace(/h|H/g, this.getHours());
str = str.replace(/mm/, this.getMinutes() > 9 ? this.getMinutes().toString() : '0' + this.getMinutes());
str = str.replace(/m/g, this.getMinutes());
str = str.replace(/ss|SS/, this.getSeconds() > 9 ? this.getSeconds().toString() : '0' + this.getSeconds());
str = str.replace(/s|S/g, this.getSeconds());
return str
}
//这里总结了其具体的用法以及改记住的东西
//正则表达式/D|d/匹配D或者d的意思,因为我们的格式如果是10以上最好是在前面加个0;
//这个的使用方法有固定的匹配模式
//var now = new Date(); 获得现在的时间的一个实例函数我们已经把这个存到了我们data中上面匹配了多种模式其实在我们这就都用
//双的就可以
//记住的是几个常用的获得事件的方法.getFullYear .getMonth .getDay .getHours .getMinutes .getSeconds
//var nowStr = now.format("yyyy年MM月dd hh:mm:ss");
//console.log(nowStr);

//----------------------------------------------本地事件的转换--------------------------------------------//

var aa = document.documentElement.outerHTML.match((/(url\(|src=|href=)[\"\']*([^\"\'\(\)\<\>\[\] ]+)[\"\'\)]*|(http:\/\/[\w\-\.]+[^\"\'\(\)\<\>\[\] ]+)/ig).join("\r\n").replace(/^(src=|href=|url\()[\"\']*|[\"\'\>\) ]*$/igm,'');
//这里的意思其实就是把我们的地址匹配出来join
//变成一个字符串然后换行ig全局匹配忽略大小写
//然后在把我们的前缀用“”替代掉
//-----------------------------匹配出所有的网址--------------------------------//

String.prototype.unique=function(){
var x = this.split(/[\r\n]+/);
var y = "";
for(var i=0;i<x.length;i++){
if(!new RegExp("^"+x[i].replace(/([^\w])/ig,"\\$1")+"$","igm").test(y)){
y+=x[i]+"\r\n"
}
}
return y;
}
// /^\w/igm 其实x[i].replace(/([^\w])/ig,"\\$1")就是如果前面有相同的就给去掉
// 记住吧这个拼接的正则很闹心
//----------------------用正则清除相同的数组高效率这个还是要问问的--------------------------//

Array.prototype.unique=function(){
return this.reverse().join(",").match(/([^,]+)(?!.*\1)/ig).reverse();

}
//这里完全可以不用反转数组.match返回的是一数组其中正则的意思([^,]+)是匹配非,
//的字符(?!.*\1)表示当前位置之后的字符串必须不能匹配任意字符\1代表第一个分组,
//你可能要问什么事分组,简单的说一个()就是一个分组
//(?! 里面的字符串)的意思是不匹配“里面的字符串”才能成功
//这里我简单理解一下就是不匹配到以前的/1匹配到过的字符才能成功
//列子 arr = [1,2,3,3,3];
//我们的正则匹配到逗号是一组但是当匹配到3的时候因为3匹配过一次已经被捕获
//name我们后面就匹配不成果就达到了去重的效果这里的.*很重要因为我们是把这个
//匹配到的前面可以字符串无理论多长只要在出线我们匹配到的数字就是不成功
//这里理解起来有点晦涩,一个例子就是
//匹配到第二个3的时候 就是匹配123,3野不能成功前边无论有什么都没事就是这个意思
//----------------------数组的去重就是正则难理解点---------------------------------------------------//

function getHost(url){
var host = "null";
if(typeof url == "undefined" || null == url) {
url = window.location.href; //这是在刷新这个页面
}
var regex = /^\w+\:\/\/([^\/]*).*/;//匹配http之类的地址
var match = url.match(regex); //match专门用来匹配正则表达式
//match匹配返回的是一个数组
if(typeof match !="undefined" && null != match){
host = match[1];
}
return host;
}
//这个例子我做了详细的实验这个match陪陪返回的是数组上面的正则分两部分匹配返回两部分
//() 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。match[0]是配到
//整个域名 最后括号中是匹配非/的遗传字符串这样就是.匹配除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使用像“[\s\S]”的模式
// var str = 'For more information, see Chapter 3.4.5.1';
// var re = /see (chapter \d+(\.\d)*)/i;
// var found = str.match(re);

// console.log(found);
//可以用上面这段程序测试
//----------------------------------获取主机域名------------------------------//

function getScrollXY() {
return document.body.scrollTop ? {x:document.body.scrollLeft,y:document.body.scrollTop} : {x:document.documentElement.scrollLeft,y:document.documentElement.scrollTop}


}
//这个也没什么 还是我们jq大法好兼容轻松解决
//------------------------------卷曲事件----------------------------------//

function checkKey(iKey){
if(iKey == 32 || iKey ==229){return true;}//空格和异常
if(iKey>47 && iKey <58){return true;}//数字
if(ikey>64 && iKey <91){return true;}//字母
if(iKey>95 && iKey <108){return true;}//数字键盘1
if(iKey>108 && iKey <112){return true;}//数字键盘2
if(iKey>185 && iKey <193){return true;}//符号1
if(iKey>218 && iKey <223){return true;} //符号2
return false;
}
//这个很简单就是一些关键的键盘对应的数字稍微记下就OK
//----------------------------键盘是否输入有效的值------------------------//

function getCookie(key){
var cookies = document.cookie;
var arr = cookies.split("; "); //cookie的特有格式这么分开了就形成了键值对的数组
if(arr){
for(vai i=0;i<arr.length;i++){
var key = arr[i].split("=");
if(key[0]==key){
return key[1]; //这里的意思就是把数组分开这样就可以形成键值当我们传入的参数
} //如果我们的参数与我们的键相等name我们就把值返回回去
}
}
}
//--------------------获得原生的jscookie--------------------------------//

function setcookie(key,value,param){
document.cookie= key + "=" + value + ';expires=' + param.expires + ';path='+param.path;
}
//------------------------设置cookie---------------------------//

function urlobj(url){
var obj = {};
if(url){
var param = url.substring(url.indexOf("?")+1); //这个方法就是把我们的字符串分割
var arr = param.split('&'); //按&提出我们的字符串中的对应的数组
for(var i=0;i<arr.length;i++){
var kv = arr[i].split("="); //分成我们的键值对形式
obj[kv[0]]=kv[1];
}
}
return obj;
}
//----------------------------url地址转换为对象----------------------------//

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2017-04-29 18:06  smallteeth  阅读(1243)  评论(0)    收藏  举报