正则匹配

空白符正则匹配
whitespace = [\x20\t\r\n\f]
\xnn 由十六进制数nn指定的拉丁字符,如,\x0A等价于\n;
\uxxxx 由十六进制数xxxx指定的Unicode字符,例如\u0009等价于\t;
所以上面:
\x20 化为二进制数为 0010 0000;
ASCII码表 http://ascii.911cha.com/
字符编码笔记 http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

正则表:

thinkphp 跨域

    public function _initialize() {
    header ( "Content-type:text/html;charset=utf-8" );
    header ( "Access-Control-Allow-Origin:*" ); // 允许任何访问(包括ajax跨域)

  }

必填选项小插件

声明

需要jq

还需要我的其他小工具
* in_array

调用

      function mustFinish_init(){

    var mustFinish_list=[
      "username",
             "password",
    ]
    MF=new mustFinish();
        //简易用法
    //MF.init("label",mustFinish_list);
        //完整用法
        MF.labels=$(".clearfix > div > label");
    MF.list=mustFinish_list;
    MF.init();

  }
    mustFinish_init();

源码

    /*===========================================必填选项*/
function mustFinish(){
  var that=this;
  this.labels=$("label");//需要标*的地方
  this.list=[];//name数组

  this.init=function(labels,list){
    that.labels=(labels)?$(labels)||that.labels:that.labels;
    that.list=list||that.list;

    //必填选项标红
    that.labels.map(function(index,element){
      var namels=$(element).parent().find("[name]");
      var isInList=false;
      namels.map(function(ind,input){
        var namevalue=input.name;
        if(in_array(namevalue,that.list)){
          isInList=true;
        }
      })
      if(isInList){
        var span=createElement("span","","*");
        span.style.color="red";
        $(element).prepend(span);
      }
    })

  }
  this.check=function(){
    var isPass=true;
    that.list.map(function(ele,ind){
      // console.dir($("[name='"+ele+"']"))
      var obj=$("[name='"+ele+"']");
      var inputValue="";
      var Nodename=obj[0].nodeName;
      var inputType;
      if(Nodename=="SELECT"){inputType="select";}
      else{inputType=obj.attr("type");}


      switch (inputType) {
        case "text":
          obj=$(obj[0]);
          inputValue=obj.val();
          break;
        case "password":
          obj=$(obj[0]);
          inputValue=obj.val();
          break;
        case "radio":
          inputValue=obj.filter(":checked").val();
          break;
        case "checkbox":
          inputValue=obj.filter(":checked").map(function(c_ind,c_ele){return c_ele.value});
          break;
        case "select":
        // console.dir(obj);
          var selecter=obj[0];
          inputValue=selecter.selectedOptions[0].value;
          inputValue=(inputValue=="请选择")?"":inputValue;
          break;
        default:
          obj=$(obj[0]);
          inputValue=obj.val();
      }
      //console.log(inputValue);
      if(!inputValue||inputValue==""){
        isPass=false;
      }
    })
    return isPass;
  }
}

window.open 打开浏览器小窗

channelmode=yes|no|1|0 是否使用剧院模式显示窗口。默认为 no。

directories=yes|no|1|0 是否添加目录按钮。默认为 yes。

fullscreen=yes|no|1|0 是否使用全屏模式显示浏览器。默认是 no。处于全屏模式的窗口必须同时处于剧院模式。

height=pixels 窗口文档显示区的高度。以像素计。

left=pixels 窗口的 x 坐标。以像素计。

location=yes|no|1|0 是否显示地址字段。默认是 yes。

menubar=yes|no|1|0 是否显示菜单栏。默认是 yes。

resizable=yes|no|1|0 窗口是否可调节尺寸。默认是 yes。

scrollbars=yes|no|1|0 是否显示滚动条。默认是 yes。

status=yes|no|1|0 是否添加状态栏。默认是 yes。

titlebar=yes|no|1|0 是否显示标题栏。默认是 yes。

toolbar=yes|no|1|0 是否显示浏览器的工具栏。默认是 yes。

top=pixels 窗口的 y 坐标。

width=pixels 窗口的文档显示区的宽度。以像素计。

    window.open ("page.html", "newwindow", "height=100, width=400, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no")

回调用法

    var ref = top.window.open('url地址', '_blank', 'location=no');  
var myCallback = function(event) {  
    if (event.url.indexOf('sina_callback.jsp?uid') > 0) {  
        alert(event.url);  
        ref.close();  
    }  
}  
ref.addEventListener('loadstart', myCallback);  

chrome 插件化 方便调用storage.sync函数

需要

说明

c( key , value , callback )

key:

  • 说明-->储存键位,可选
  • 类型-->string / object
  • 如果是string,支持点语法 例如 u.getConfig
  • 如果是object,就会忽略value的值,直接把它写入到snyc储存

value:

  • 说明-->修改的值
  • 类型-->string / object / null
  • 不定义value为查询,定义了value则为修改
  • 如果是null , 删除该key(支持点语法)

callback:

  • 说明-->修改的值,必选
  • 类型-->function
  • 用以输出资料

奇淫巧技

  • c(function(ret){console.log(ret)});//输出全部snyc储存数据
  • c("u.getConfig",null,function(ret){console.log(ret)});//删除u下的getConfig

js

`

//c方法实现机制
function c(){
var key = arguments[0];
switch (true) {
case (typeof(key)=="undefined"):
key=null;
break;
case (typeof(key)=="function"):
key=null;
break;
case (key==""):
key=null;
break;
}
var callback,val;
//获取 回调函数 和 值
for(var i = 0 ,len=arguments.length; i < len ; i++){
if(typeof(arguments[i])=="function"){
callback=arguments[i];
}else{
if(i!=0){
val=arguments[i];
}
}
}
//如果key为json数据,直接写入并断开
if(typeof(key)=="object"&&key!=null){
//直接输入json数据,set
chrome.storage.sync.set(key, function(result){
chrome.storage.sync.get(null,function(newresult){
if(typeof(callback)!="undefined"){
callback(newresult);
}else{
return newresult;
}
})
})
return;
}
var keyObj;
var keyArr=[];
//点语法处理
keyArr=(typeof(key)!="string")?[null]:key.split(".");
chrome.storage.sync.get(keyArr[0],function(result){
switch (true) {
case (typeof(val)!="undefined"):
//存在val,判断是否要清除
if(val==null){
//清除操作
if(keyArr.length>1){
//删除对象中的一个属性
var data=childMerge(keyArr,undefined,result);
chrome.storage.sync.set(data, function(){
chrome.storage.sync.get(null,function(newresult){
if(typeof(callback)!="undefined"){
callback(newresult);
}else{
return newresult;
}
})
})
}else{
//删除整个对象
chrome.storage.sync.remove(keyArr[0], function(){
chrome.storage.sync.get(null,function(newresult){
if(typeof(callback)!="undefined"){
callback(newresult);
}else{
return newresult;
}
})
});
}
return;
}
var data=childMerge(keyArr,val,result);
chrome.storage.sync.set(data, function(){
chrome.storage.sync.get(null,function(newresult){
if(typeof(callback)!="undefined"){
callback(newresult);
}else{
return newresult;
}
})
})
break;
default:
// keyArr.splice(0,1);
ret=($.isEmptyObject(result))?"":childFind(result,keyArr);
if(typeof(callback)!="undefined"){
callback(ret)
}else{
return ret;
}
}
})
}
//遍历寻找子元素
function childFind(obj,arr){
if(arr[0]==null){
return obj;
}
if(typeof(obj[arr[0]])=="undefined"){
return undefined;
}
if(arr.length==1){
return obj[arr[0]];
}
if(arr.length>1){
var linshi=arr.concat();
linshi.splice(0,1);
return childFind(obj[arr[0]],linshi)
}else{
return obj[arr[0]];
}
}
//根据数组生成对象
function childMerge(arr,val,orobj){
var obj=clone(orobj);
var linshiObj=obj;
// arr=arr.reserve();
for(var i = 0 , len = arr.length ; i < len ; i++){
var nkey=arr[i];
switch (true) {
case (i==len-1):
linshiObj[nkey]=val;
break;
default:
if(typeof(linshiObj[nkey])!="object"&&i!=len-1){
linshiObj[nkey]={};
linshiObj=linshiObj[nkey];
}else{
linshiObj=linshiObj[nkey];
}
}
}
return obj;
}
function clone(myObj){
if(typeof(myObj) != 'object' || myObj == null) return myObj;
var newObj = new Object();
for(var i in myObj){
newObj[i] = clone(myObj[i]);
}
return newObj;
}
`