myeclipse快捷键:
快速查找类的所有属性和方法(还可输入条件):
ctrl + o
再无聊的时光都是限量版的
学海无涯,我离大师还有多远!研究jquery源代码! 注意学以致用,多想想自己如何使用先进的技术
没事时要认真做的事:
1、研究jquery源代码(myeclipse 开卷有益) 3、研究Struts2, 分析源代码
db2分页:
select * from (select 字段1,字段2,字段3,字段4,字段5,rownumber() over(order by 排序字段 asc ) as rowid from 表名 )as a where a.rowid >= startPage AND a.rowid <endPage
js庸俗的if:
错误写法: if(name != null)... 帅气的写法: if(name)...
js正则--exec、match区别:
1、reg.test(str)//返回true,false 2、reg.exec(str)//返回匹配 3、str.match(reg)//返回匹配,与exec反着 exec返回分组(exec永远只返回一个值),match返回所有匹配 javascript exec match 区别 - makemyownlife - ITeye技术网站.mht
db2中模糊查找表:
select * from sysibm.systables where type='T' and creator = 'SNDBUSR' and name like upper('%city%') order by name; select name from sysibm.systables where type='T' and creator='DB2ADMIN'; type:数据库表用T表示;数据库视图用V表示 creator:数据库对象的创建者 db2查询表的所有列:(注意表名要大写) select * from sysibm.syscolumns where tbname like 'XBOOK_SHELF' and name in ('FIELD1','FIELD3'); --like oracle dual select 1 from sysibm.sysdummy1; select sysdate from sysibm.sysdummy1; 修改column默认值: alter table SNDBUSR.xbook_shelf alter column field1 set default -1; alter table SNDBUSR.xbook_shelf alter column field3 set default '0'; 删除含有null的数据: delete from xbook_shelf where field3 = '0' or field3 is null; 这样才可删除field3 !='1'的数据, 如果直接delete from xbook_shelf where field3 !='1',这样是删除不了含有null的数据的 db2的null.doc
1、undefined
在ie中,undefined可以被重写,firefox中不可以 undefined = "this is undefined"; alert(undefined); 2、正则:\s匹配单个空格符,tab键和换行符(\r、\n) 3、正则 \i:不区分大小写,eg: 匹配由26个英文字母组成的字符串:^[A-Za-z]+$ 也可写成:/^[a-z]+$/i
js 原型继承法:
//Person类 function Person(){ this.introduce = function(){ alert("This is Person"); } } //Student类 function Student(){ } 如何让Student继承Person? Student.prototype = new Person(); //把一个Person实例的所有属性和方法添加到Student的Prototype上面去,这样就相当于Student继承了Person Student.prototype.constructor = Student; //第一步继承的时候会将Student的构造方法变成Person,因此需要在第二步需要重新设置Student的构造方法 //javascript王者归来关于prototype的讲解还是很详细很细致的 var stu = new Student(); stu.introduce(); 这句 Student.prototype = new Person(); 相当于完全删除了prototype 对象原先的值,然后赋予一个新值。那么第二行又是什么意思呢? Student.prototype.constructor = Student;原来,任何一个prototype对象都有一个constructor属性,指向它的构造函数。也就是说, Student.prototype 这个对象的constructor属性,是指向Student的。 我们在前一步已经删除了这个prototype对象原来的值,所以新的prototype对象没有 constructor属性,需要我们手动加上去,否则后面的”继承链”会出问题。这就是第二行的意思。 混合继承法: //People类 function People(name){ this.name=name; this.SayName=function(){ alert("My name is "+name); } } //Girl类 function Girl(name,age){ //构造继承 this.father=People; this.father(name); //将People的所有属性和方法添加到Girl上面 delete this.father; //不使用构造方法,也可使用call //People.call(this, name); this.Introduce=function(){ alert("My name is "+name+".I am"+age); } } //原型继承 Girl.prototype=new People(); //好了,两种方式的混合,现在看看,是不是问题解决了呢? var g=new Girl("Xuan",22); alert(g instanceof People); g.SayName(); g.Introduce();
js各种类型转换成布尔规则:
1、undefined alert(!!undefined);//false alert(!undefined);//true 说明undefined为false 2、null alert(!!null);//false alert(!null); //true 说明null为false 3、Object 非null时为true,null时为false var obj = null; alert(!!obj);//false obj = {}; alert(!!obj);//true 4、String 非空字符串为true,""(空字符串)为false var obj = ""; alert(!!obj);//false obj = "xx"; alert(!!obj);//true 5、Number 非0和NAN为true,0和NAN为false var i = 0; alert(i+"\t"+(!!i)); i = parseInt("xx"); alert(i+"\t"+(!!i)); i =1;var j = -1; alert(i+"\t"+(!!i)+"\t"+j+"\t"+(!!j)); Tip: 1、typeof返回的结果始终是一个字符串 2、所有变量都用var定义,变量类型根据值来判断 3、不存在值为null的string 4、undefined转换为boolean时为false 5、null类型为object(typeof(null)=="object") 6、 alert(undefined == null) //true
js--闭包理解
var name = "The Window"; var object = { name:"My Object", getName:function(){ return function(){ return this.name; //return name; //this可省略 这个this为object的宿主 }; //return this.name; } } alert(object.getName()()); //The Window 理解: 1、object.getName()=function(){return this.name;} 2、object.getName = function(){ return function(){ return this.name; } } 3、object.getName()() == this.name
求金额的正则表达式,保留小数点后两位
var re = /^(-)?(\d)*(\.(\d){2})?$/; ?:0个或一个 +:1个或多个 *:0个或多个 reg.test(str); 手机正则:/^0*(13|15)\d{9}$/ //现在应该为:/^0*1\d{10}/$ 电话号码正则: /^(\d{3,4}-)?\d{7,8}(-\d{3,4})?$/ ^\d{3,4}-:区号必填为3-4位的数字,区号之后用“-”与电话号码连接 \d{7,8}:电话号码为7-8位的数字 (-\d{3,4})?:分机号码为3-4位的数字,非必填,但若填写则以“-”与电话号码相连接 身份证号码的匹配:身份证号码可以是15位或者是18位,其中最后一位可以是X,其它全是数字: /^(\d{14}|\d{17})(\d|[xX])$/ \d{9}:9位数字 \d{3,4}:3-4位数字 \d:1位数字 [xX]:x、X其中一个 |:或的意思
javascript是脚本语言,所以javascript的执行需要有一个宿主环境(
拥有内存空间的对象),
在浏览器中这个宿主环境就是window对象,所以 在全局函数中,this指代的是window对象(当前对象就是window) (除非使用new({}),call,apply方法来改变this的指代关系)。 window.alert();window可省略,也可用this.alert();//this == window this表示当前对象,所以new时this表示这个new出来的对象 watch窗口:变量窗口 右击 watch(有时不给力) 共享:\\10.21.140.98
document.getElementById("btn").onclick = test;
全写为window.document.getElementById("btn");//省略了window window.alert("xxxxxxxx");//内涵
js--扩展Date,给Date添加一个dateDiff方法
Date.prototype.dateDiff=function(){...}//直接写在js里面 //Date对象返回两个日期对象之间的时间间隔。 //这个方法很巧妙,根据参数取对象属性 Date.prototype.dateDiff = function(interval,objDate2){//interval='y','q','m','ms','w','d','h','n','s' var d=this, i={}, t=d.getTime(), t2=objDate2.getTime(); i['y']=objDate2.getFullYear()-d.getFullYear(); // i['y']=i.y 给i定义属性y,这种方式差点记不得了 i['q']=i['y']*4+Math.floor(objDate2.getMonth()/4)-Math.floor(d.getMonth()/4); i['m']=i['y']*12+objDate2.getMonth()-d.getMonth(); i['ms']=objDate2.getTime()-d.getTime(); i['w']=Math.floor((t2+345600000)/(604800000))-Math.floor((t+345600000)/(604800000)); i['d']=Math.floor(t2/86400000)-Math.floor(t/86400000); i['h']=Math.floor(t2/3600000)-Math.floor(t/3600000); i['n']=Math.floor(t2/60000)-Math.floor(t/60000); i['s']=Math.floor(t2/1000)-Math.floor(t/1000); return i[interval]; }
js-parseInt()陷阱:
var a = parseInt("09"), b = Number("09"); 很多人会认为a和b的值都是数字9,但实际上不是。//0,9 在没有指定radix或者radix为0的情况下,parseInt会按十进制进行转换。然而,这在某些情况下有点特殊: * 如果string的值以“0x”开头,parseInt会按十六进制进行转换; * 如果string的值以“0”开头,parseInt会按八进制进行转换。 说回开头的代码,由于"09"是以“0”开头,所以parseInt会按八进制进行转换,但是“9”不是合法的八进制值(八进制只有0-7八个数字),所以转换结果是0。 要避免这个陷进,可以强制指定radix: 代码如下: alert(parseInt("09", 10)); // outputs '9' css".x" -> class="x" maven笔记: mvn配置:window -> Preferences -> Maven 1、Installations:External S:\springToolSuite\apache-maven-3.0.4 勾上, 注意:Global settings:S:\springToolSuite\apache-maven-3.0.4\conf\settings.xml 2、User Settings:E:\vitualPro\springToolSuite\apache-maven-3.0.4\.m2\settings.xml mvn -version/-v echo %java_home% java -version echo %m2_home% groupId,artifactId(工程Id),version:定义了一个项目基本的坐标 mvn clean compile(进入工程下面,编译) mvn clean test(自动化测试) mvn clean package(打包,将包打到target下面) mvn clean install(打jar包保存到本地仓库,让其他工程引用) //mvn新建一个工程 mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp //打包 mvn package //转换成eclipse工程 mvn eclipse:eclipse maven spring repository
Spring mvc 笔记:
1、只接受post请求:@RequestMapping(value="fnd/searchHotel.htm",method=RequestMethod.POST) Spring mvc还是要详细学学 @Controller @RequestMapping("/test.do") public class Test{ @RequestMapping(params="method=show") public String show(User user,ModelMap model){ System.out.println(“calling...”); } } 报找不到java -> maven更新依赖 clean 统一格式化代码:window -> preferences -> Formatter
jquery常用方法:
.append(content) :向每个匹配的元素的内部的结尾处追加内容 .show(); .hide(); .val(); .html();//有些dom对象没有value只能取html或者text
dom对象转成jquery对象:
//<input type="text" id="txt" value="1111111111111"> var txt = document.getElementById("txt");//获取dom对象 var $txt = $(txt);//转换为jquery对象 alert($txt.val()); jquery对象转成dom对象: //<input type="text" id="txt" value="1111111111111"> var $txt = $("#txt");//获取jquery对象 //转换为dom对象 var txt = $txt[0];//1 var txt = $txt.get(0);//2 var trs = $("#mytable tr");//获取mytable里面所有的tr var tr = trs[0];//dom对象, 此时为dom对象而非jquery对象,容易犯错的地方 var tr = trs.eq(0);//这才是jquery对象 jquery有length属性和size()方法 var trs = $("#mytable tr"); alert(trs.size()); alert(trs.length);
eval解析"{}"对象时必须加上一对小括号"()",eg:
var code = "{a:2}"; alert(eval(code));//-> undefined code ="("+code+")"; alert(eval(code));//-> [object Object]
JS中实现replaceAll的方法:
第一次发现JavaScript中 replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符. 而 str.replace(/\-/g,"!")则可以全部替换掉匹配的字符(g为全局标志)。 //: /\-/g,-为要被替换的字符,!为替换为的字符串 var str = "1111" + \r\n" + "22222" + "\r\n" + "33333"; str = str.replace(/\r/g,"").replace(/\n/g,""); //用空字符串代替 var mytime=new Date(yyyy,mm -1,dd,hour,minute,second); //month:一个表示月份的数值,该值介于 0(一月) ~ 11(十二月) 之间。 var now =new Date().getTime(); var period = mytime.getTime()-now;//返回间隔毫秒数 //将t毫秒转换长几天几时几分几秒 function formatTime(t) {//毫秒数 if (t > 0) { var totalSecond = t / 1000; var second = Math.floor(totalSecond % 60); var minute = Math.floor(totalSecond / 60); var hour = Math.floor(minute / 60); var day = Math.floor(hour / 24); minute = minute % 60; hour = hour % 24; return [day, hour, minute, second]; } else { return [0, 0, 0, 0]; } }
jquery:eq(index)=按index取元素
<p> This is just a test.</p> <p> So is this</p> $("p").eq(1);//取第2个p
js:
定义一个对象: { } 定义一个数组: [ ] js定义一个对象,对象下面有两个数组对象: var obj={elem:[{sequence:'1',name:'文本1'},{sequence:'2',name:'文本2'}],elem2:[]}; //obj有两个属性:elem,elem2;elem,elem2为两个数组;elem数组长度为2,elem2为空数组。
jquery根据name属性查找一个元素:
使用jquery的属性查找方式. $("input[name="+name+"]") 根据属性查找元素: $("[title]").click().......... 即选择所有元素内 属性带有title的元素 即 <li class="aaaa" title="ttt">li-1</li> <li title="fffff">li-2</li> <div class="aaaa" title="ttt">li-1</div> <div title="fffff">li-2</div> $("div[title]").click().......... 选择所有div标签下的所有带title的元素 即 <div class="aaaa" title="ttt">li-1</div> <div title="fffff">li-2</div> jquery 属性选择器_姚松阳_新浪博客 JQuery遍历table的tr+td: function 函数名() { var i=$('#xmmcTable tr').size(); //子元素过滤器 var j=i-1; if(i>1) { var td1text=$('#xmmcTable tr').eq(j). find("td").eq(0).text(); var td2text=$('#xmmcTable tr').eq(j).find("td").eq(1).find("input ").eq(0).val(); var td3text=$('#xmmcTable tr').eq(j).find("td").eq(2).find("input ").eq(0).val(); var td4text=$('#xmmcTable tr').eq(j).find("td").eq(3).find("<select>").eq(0).val(); }
jquery查找子元素过滤器:
var tr_1 = $("#mytable tr:first-child");//查找第一个子元素 var tr_4 = $("#mytable tr:last-child");//查找最后一个子元素 var tr = $("#mytable tr:nth-child(6)");//查找第6一子元素,从1开始 var trs = $("#mytable tr:odd");//基数135,相当于索引024... for(var i=0;i<trs.length;i++){ alert(trs.eq(i).attr("id")); } $("#mytable tr:even").css("color","red"); $("#mytable tr:nth-child(3n+1)").css("color","red");//(3n+1):顺序,取第1、4、7等行 下面两句等同([]中可写dom属性:value,class。。。): var tr = $("#t1 tr[class='x']"); var tr = $("#t1 tr.x");
遍历js对象的所有属性:
var tr = document.getElementById("tr1"); var str = ""; for(var p in tr){ if(tr[p] !=null && tr[p] != ""){ str = str + p + "=" +tr[p]+"\r\n"; } } alert(str);
连接查询:
左连接左边的总显示(即使右边的为空,右边无匹配,部门无员工),右连接右边的总显示(即使左边的为空) 现有员工表(Emp)和部门表(Dept),现有需要:查出员工和其部门, 无论部门有没有员工都要显示(新部门刚成立),此时就需要使用外连接查询 右连接: select ename , dname from emp right join dept on emp.deptno = dept.deptno 左连接(无论是否有员工都显示部门): select * from dept left join emp on dept.deptid = emp.deptid; 计算器:calc.exe
获取select 选中的 text :
$("#ddlregtype").find("option:selected").text(); 获取select选中的 value: $("#ddlregtype ").val(); 获取select选中的索引: $("#ddlregtype ").get(0).selectedindex; 设置选中option: var selectbox = $("#bokrflag").get(0); selectbox.selectedIndex=1(xx); 根据value设置选中option: $("#select_id option[value='"+Value+"']").attr("selected",true); tip: 快捷方式右击查找目标,打开文件所在目录
菜单及action权限分析:
菜单分类:顶级菜单、二级菜单(左边菜单) 菜单及action: 1、每个叶子菜单(即二级菜单)本身绑定有action 2、每个叶子菜单下面又有很多action和Ajax请求 可以用存储过程一次查找出所有权限 也可以不用存储过程,大部分用户(user,客户customer)的操作都是固定的一部分,没必要将所有的权限都一次查找出来 权限这东西要做成过滤器,不要再业务层进行操作,一来是公用的,二来简化action
在JS中有两种定义函数的方式,
1是var aaa=function(){...} 2是function aaa(){...} var 方式定义的函数,不能先调用函数,后声明,只能先声明函数,然后调用。 function方式定义函数可以先调用,后声明 预编译时var的变量会初始化为:undefined,function会被解析(在脚本执行前) 原型继承与call继承的区别: call没有把function加到原型链上去
var obj = obj || {};
obj = obj || {}; 难不成这样的操作返回的结果是对象而不是boolean值 ? 简单的说,先执行操作符左侧的结果,然后尝试将其转换为boolean值, 如果结果为true,则返回左侧的执行结果而不是true, 如果结果为false,则执行右侧的表达式并返回结果 javascript利用正则实现trim:String.prototype.trim = function(){return this.replace(/(^\s*)|(\s*$)/g,""); } var str = " 111111111 222222222222 "; str = str.trim(); alert(str); arguments[i]
jquery设置样式:
$("p").css("color"); $("p").css("color","red"); $("p").css( { "margin-left": "10px", "background-color": "blue" });
EStore(
前台工程)如何引用StoreManager(
后台工程)的代码:
var test1 = function fun(){}
alert(fun); fun is not defined! 不要这样写,这样写不规范,fun没有任何意义(IE不符合规范不会报错) |