myNote

来源:互联网 发布:淘宝小二会旺旺联系吗 编辑:程序博客网 时间:2024/04/29 19:06

myeclipse快捷键:

快速查找类的所有属性和方法(还可输入条件):

ctrl + o

 

再无聊的时光都是限量版的
学海无涯,我离大师还有多远!研究jquery源代码!
注意学以致用,多想想自己如何使用先进的技术

没事时要认真做的事:
1、研究jquery源代码(myeclipse   开卷有益
3、研究Struts2,分析源代码

备忘学习资料:
js学习笔记.doc  //要经常复习
        Javascript学习笔记5——类和对象.doc
javascript继承的写法_三水清.mht
javascript+王者归来.pdf

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不符合规范不会报错)

原创粉丝点击