总结
2016-05-23 23:30
183 查看
浏览器兼容问题:
div中的图片间隙 ie6Bug 描述:在div中插入图片是,图片会将div下方撑大1像素
解决:将</div>与<img>写在一行上
将</img>转为块元素 ,给<img>添加声明display:block
双倍浮动(双倍边距) ieBUG 描述:浏览器在解析浮动元素时,会错误的浮向边界加倍显示
解决:给浮动元素添加声明display:inline
百分比bug ie6Bug 解析百分比时,会按照四舍五入方式计算从而导致50% +50% 大于100%的情况。
解决:给右面的浮动元素添加声明:clear:right 清除右浮动
鼠标指针Bug描述:cursor属性值只有IE浏览器识别,其他浏览器不识别该声明
解决:如统一某元素鼠标指针形状为手型
W3c标准
万维网联盟 World Wide Web Consortium
网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。
Mvc/mvvm
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
MVVM是Model-View-ViewModel的简写
面向对象
面向对象(Object Oriented,OO)是软件开发方法一种编程思想
对象包括属性(Properties)和方法(Methods) 构造函数 prototype
什么是面向对象:不需要关注内部细节,只关注对象提供的功能。
面向对象变成的特点:
封装、
继承:从一个已有对象上,继承出新的对象、
多态:父类和子类有同样的方法,但是操作不一样
变量和属性、函数和方法的区别
Var a = 12; //变量
Var arr = [1,2,3,4];
arr.a = 13; //属性
function a(){alert(1)} //函数
arr.fn = function(){alert(2)}; //方法
arr.fn()
形成工厂模式的前奏因为需要每次创建对象很麻烦。
var obj1 = new Object();
obj1.name = ‘Json’;
obj1.showSex = function(){alert(this.name)}
var obj2 = new Object();
obj2.name = ‘leo’;
obj2.showName = function(){alert(this.name);}
缺点:多次创建对象麻烦 所以 封装起来 称为构造函数
工厂方式问题:1.没有new 2.每个对象都有一套自己的函数浪费资源。
Alert( p1.showName == p2.showName) 结果为false
function createPerson(name,sex){
Var obj = new Object();
this.name = name;
this.sex = sex;
obj.showName = function(){
alert(this.name);
}
Obj.showSex = function(){
Alert(this.sex);
}
return obj;
}
Var P1 = createPerson(‘blue’,’男’);
Var p2 =createPerson(‘leo’,’女’);
P1.showName();
P1.showSex();
P2.showName();
P2.showSex();
alert(P1.showName == P2.showName) // false
原理:var a = function(){alert(1)}; 实际上是 var a = new Function(“alert(‘abc’)”);
Var b = function(){alert(1)}; 实际上是 var b = new Function(“alert(‘abc’)”);
解决工厂方式 没有new
Function createPerson(name,sex){
//Var Obj = new Object();
this.name = name;
this.sex = sex;
this.showName = function(){alert(this.name)}
this.showSex = function(alert(this.sex));
//return Obj;
}
Var p1 = new createPerson(‘leo’,”男”);
原理:
function show(){
//Var this = new Object();
Alert(this);
}
Show(); //window
New show(); //Object 相当于在function show方法中加入: var this = new Object();
Var arr1 = new Array(12,3,4,5);
Var arr2 = new Array(42,22,55,3);
Arr1.sum = function(){
Var result = 0;
Var I = 0;
For( i = 0; i< this.length; i++){
Result +=this[i]l;
}
Return result;
}
Alert(arr1.sum());
Alert(arr2.sum())
问题:arr1对象有方法 arr2没有方法,怎么办;引出了prototype(原型)
Var arr1 = new Array(12,3,4,5);
Var arr2 = new Array(42,22,55,3);
Array.prototype.sum = function(){
Var result = 0;
Var I = 0;
For( i = 0; i< this.length; i++){
Result +=this[i]l;
}
Return result;
}
Alert(arr1.sum());
Alert(arr2.sum())
利用原型给系统对象创建自定义方法,实现字符串前后无空格
String.prototype.trim = function(){
Return this.replace(/^\s|\s$/g, ‘ ’)
}
Var str = “ sdf sdf ”;
Alert(str.trim());
Prototype原型是为了解决工厂方式的资源浪费
既然可以给系统添加prototype也可以给自己的类条件prototype
Function CreatePerson(name,sex){
this.name = name;
this.sex = sex;
}
CreatePerson.prototype.showName = function(){
alert(this.name)
}
CreatePerson.prototype;showSex = function(){
alert(this.sex)
}
Var p1 = new CreatePerson(‘blue’,’男’)
Var p2 = new CreatePerson(‘leo’,’女’);
P1.showName();
P1.showSex();
P2.showName();
P2.showSex()
Alert(p1.showName == p2.showName ); //true
这样就每个对象就不会都有一套自己的方法了
给对象添加方法 大于给prototype添加方法
Array.prototyp.a = 12;
Var arr = [1,2,3];
Alert(arr.a) //12
Arr.a = 5;
Alert(arr.a) //5
Delete arr.a;
Alert(arr.a) //12
点击事件和定时器中的this问题
function Bbb(){
Var _this = thisl;
This.b =12;
Document.getElementByI(‘btn1’).onclick = function(){
_this.show();
}
}
Bbb.prototype.show = function(){
Alert(this.b);
}
Window.onload = function(){
New Bbb();
}
改造为面向对象的技巧:将变量改成对象的属性,将函数改为对象的方法,不允许有函数嵌套
继承:
function Person(name,sex){
This.name = name;
This.sex = sex;
}
Person.prototype.showName = function(){
Alert(this.name);
}
Person.prototype.showSex = function(){
Alert(this.sex);
}
function Worker(name,sex,job){
//调用父级的构造函数 this指向new出来的Work对象
//构造函数伪装
Person.call(this. Name , sex );
This.job = job;
}
//通过原型继承父级的方法 worker原型指向Perons引用,指向的是地址
//这样就是子类影响到父类 所以不适用
//Worker.prototype = Person.prototype;
//(重点)利用原型链来继承父级的方法(将上面改为下边就不影响父类了)
for(var i in Perosn.prototype){
worker.Prototype[i] = Perosn.prototype[i];
}
Worker.prototype.showJob = function(){
Alert(this.job)
}
Var oP= new Person(“Join”,”男”);
Var oW = new Worker(‘blue’, ’男’ ,’打杂的’);
oP.showName();
oP.showSex()
oW.showName()
oW.showSet()l
oW.showJob()
alert(oP.showName == OW.showName) // true
//a1怎么会找到Aaa.prototype下的num呢?
function Aaa(){}
Aaa.prototype.num = 10; //Aaa.prototype也是一个对象
var a1 = new Aaa();
alert(a1.num); //a1怎么会找到Aaa.prototype下的num呢?
原型链:实例对象与原型之间的链接,叫做原型链。
__proto__(隐士链接)。
Object对象类型是原型链的最外层
hasOwnProperty:看是不是对象自身下面的属性
var arr = [];
arr.num = 10;
Array.prototype.num2 = 20;
alert( arr.hasOwnProperty(“num”) ) //true
alert( arr.hasOwnProperty(“num2”) )//false Array.prototype也是一个对象所有数组对象都可以用
constructor:查看对象的构造函数
function Aaa(){}
var a1 = new Aaa();
alert( a1.constructor ); //Aaa函数
var arr = [];
alert( arr.constructor ); //Array函数
alert( arr.constructor == Array ); //true 可以做类型判断
原理:
function Aaa(){}
Aaa.prototype.constructor = Aaa; //系统会自动生成这个
var a1 = new Aaa();
alert( a1.constructor );
instanceof 就是判断某对象是不是 某个类的实例 所有的类都是从Object上继承过来的
例子:
Var arr1 = [1,2,3];
Alert(arr1 instanceof Array);
toString():系统对象下面都是自带的,自己写的对象都是通过原型链object下面的
var arr = [];
alert( arr.toString == Object.prototype.toString ); //false
function Aaa(){}
var a1 = new Aaa();
alert( a1.toString == Object.prototype.toString ); //true
//利用toString做类型判断:
var arr = [];
alert( Object.prototype.toString.call(arr) ); //[object Array]
//做16禁止转化
var num = 255;
alert(num.toString(16)); //ff
//转化成字符串
var arr = [“1”,”2”,”3”];
Array.prototype.toString = function(){
return this.join(“+”);
}
alert( arr.toString() ); //1+2+3
三种方法做类型判断
Amd/cmd
AMD推崇依赖前置,在定义模块的时候就要声明其依赖的模块
CMD推崇就近依赖,只有在用到某个模块的时候再去require
数组去重
<script>
// Array.prototype.unique1 = function()
// {
// // console.log(this); //这里的this是数组中的值
// var n = []; //一个新的临时数组
// for(var i = 0; i < this.length; i++) //遍历当前数组
// {
// //如果当前数组的第i已经保存进了临时数组,那么跳过,
// //否则把当前项push到临时数组里面
// //n.indexOf(this[i]) 指定某个字符串的值在字符串中首次出现的位置
// if (n.indexOf(this[i]) == -1)
// console.log('这是i的值:'+i); //这里遍历的是n这个数组
// n.push(this[i]);
// }
// return n;
// }
Array.prototype.unique2 = function(){
// console.log(this);//表示arr整个数组 是arr对象
var n = {}, r = [];//n为hash表,r为临时数组
for(var i = 0 ; i < this.length; i++){
if(!n[this[i]]){//如果hash表中没有当前项
n[this[i]] = true;//存入hash表
r.push(this[i]);//把当前数组的当前项push到临时数组里面
}
}
return r;
}
for(var i = 0 ; i < arr.length;i++ ){
for(var j = i+1 ; j<arr.length; j++){
if(arr[i] == arr[j]){
arr.splice(j,1);
}
}
}
var arr = ['string',"array","function","string","string"];
arr.unique2();
</script>
JSON去重
Array.prototype.quchong = function(){
var tmp = {},a = this.slice();
for(var i =j= 0 ; i< a.length;i++){
if(!tmp[a[i].id]){
tmp[a[i].id] = 1;
j++;
}else{
this.splice(j,1)
}
}
}
var arr8 = [
{“id”:1},{“id”:1},{“id”:2},{“id”:3},{“id”:1}
]
arr8.quchong()
console.log(arr8)
session和Cookie区别?
HTML5 提供了两种在客户端存储数据的新方法:
localStorage - 没有时间限制的数据存储
sessionStorage - 针对一个 session 的数据存储
之前,这些都是由 cookie 完成的。但是 cookie 不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得 cookie 速度很慢而且效率也不高。
seesion保存在服务器,客户端不知道其中的信息,cookie保存在客户端,服务器能够知道其中的信息
session中保存的是对象,cookie中保存的是字符串
session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到,而cookie中如果设置了路径参数,那么同一个网站中不同路径下cookie互相是访问不到的。
sessin默认需要借助cookie才能正常工作。如果客户端完全静止cookie,session,这种方法将失效,单可以url重写
session在用户会话结束后就会关闭,但cookie因为保存在客户端,可以长期保存
cookie是服务器向客户端写入的片段信息。cookie信息保存在服务器缓存区,不会再客户端显示。当你第一次登陆一个网站,服务器想你的机器写的片段信息,你可以在internet选项找到存放 cookie文件夹。如果不删除就一直在这个文件夹
移动端尺寸:
http://www.cnblogs.com/mingjixiaohui/p/5430947.html
1像素边框问题:
http://www.cnblogs.com/mingjixiaohui/p/5507482.html
高清图片适配
http://www.cnblogs.com/mingjixiaohui/p/5435349.html
javascript方法
indexOf()方法可返回某个指定的字符串值在字符串中首次出现的位置
ceil()方法 向上取整 :
concat()方法 向下取整
substring() 方法用于提取字符串中介于两个指定下标之间的字符。
splice方法用于插入、删除或替换数组的元素。
charAt方法可返回指定位置的字符。
substr()方法可在字符串中抽取从 start 下标开始的指定数目的字符。
slice() 方法可从已有的数组中返回选定的元素。
join()方法用于吧数组中的所有元素放入一个字符串
正则:
正则表达式30分钟入门教程 http://deerchao.net/tutorials/regex/regex.htm
预编译
IE内核,火狐,谷歌内核,css为什么这样写区别?原理
Trident Geako webkit
工具Hbuilder深入了解其功能
Canvas 动画 插件 echars
Bootstrap分页 响应式
移动端事件touch事件库 Hummer.js 和百度的touch.js
div中的图片间隙 ie6Bug 描述:在div中插入图片是,图片会将div下方撑大1像素
解决:将</div>与<img>写在一行上
将</img>转为块元素 ,给<img>添加声明display:block
双倍浮动(双倍边距) ieBUG 描述:浏览器在解析浮动元素时,会错误的浮向边界加倍显示
解决:给浮动元素添加声明display:inline
百分比bug ie6Bug 解析百分比时,会按照四舍五入方式计算从而导致50% +50% 大于100%的情况。
解决:给右面的浮动元素添加声明:clear:right 清除右浮动
鼠标指针Bug描述:cursor属性值只有IE浏览器识别,其他浏览器不识别该声明
解决:如统一某元素鼠标指针形状为手型
W3c标准
万维网联盟 World Wide Web Consortium
网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。
Mvc/mvvm
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
MVVM是Model-View-ViewModel的简写
面向对象
面向对象(Object Oriented,OO)是软件开发方法一种编程思想
对象包括属性(Properties)和方法(Methods) 构造函数 prototype
什么是面向对象:不需要关注内部细节,只关注对象提供的功能。
面向对象变成的特点:
封装、
继承:从一个已有对象上,继承出新的对象、
多态:父类和子类有同样的方法,但是操作不一样
变量和属性、函数和方法的区别
Var a = 12; //变量
Var arr = [1,2,3,4];
arr.a = 13; //属性
function a(){alert(1)} //函数
arr.fn = function(){alert(2)}; //方法
arr.fn()
形成工厂模式的前奏因为需要每次创建对象很麻烦。
var obj1 = new Object();
obj1.name = ‘Json’;
obj1.showSex = function(){alert(this.name)}
var obj2 = new Object();
obj2.name = ‘leo’;
obj2.showName = function(){alert(this.name);}
缺点:多次创建对象麻烦 所以 封装起来 称为构造函数
工厂方式问题:1.没有new 2.每个对象都有一套自己的函数浪费资源。
Alert( p1.showName == p2.showName) 结果为false
function createPerson(name,sex){
Var obj = new Object();
this.name = name;
this.sex = sex;
obj.showName = function(){
alert(this.name);
}
Obj.showSex = function(){
Alert(this.sex);
}
return obj;
}
Var P1 = createPerson(‘blue’,’男’);
Var p2 =createPerson(‘leo’,’女’);
P1.showName();
P1.showSex();
P2.showName();
P2.showSex();
alert(P1.showName == P2.showName) // false
原理:var a = function(){alert(1)}; 实际上是 var a = new Function(“alert(‘abc’)”);
Var b = function(){alert(1)}; 实际上是 var b = new Function(“alert(‘abc’)”);
解决工厂方式 没有new
Function createPerson(name,sex){
//Var Obj = new Object();
this.name = name;
this.sex = sex;
this.showName = function(){alert(this.name)}
this.showSex = function(alert(this.sex));
//return Obj;
}
Var p1 = new createPerson(‘leo’,”男”);
原理:
function show(){
//Var this = new Object();
Alert(this);
}
Show(); //window
New show(); //Object 相当于在function show方法中加入: var this = new Object();
Var arr1 = new Array(12,3,4,5);
Var arr2 = new Array(42,22,55,3);
Arr1.sum = function(){
Var result = 0;
Var I = 0;
For( i = 0; i< this.length; i++){
Result +=this[i]l;
}
Return result;
}
Alert(arr1.sum());
Alert(arr2.sum())
问题:arr1对象有方法 arr2没有方法,怎么办;引出了prototype(原型)
Var arr1 = new Array(12,3,4,5);
Var arr2 = new Array(42,22,55,3);
Array.prototype.sum = function(){
Var result = 0;
Var I = 0;
For( i = 0; i< this.length; i++){
Result +=this[i]l;
}
Return result;
}
Alert(arr1.sum());
Alert(arr2.sum())
利用原型给系统对象创建自定义方法,实现字符串前后无空格
String.prototype.trim = function(){
Return this.replace(/^\s|\s$/g, ‘ ’)
}
Var str = “ sdf sdf ”;
Alert(str.trim());
Prototype原型是为了解决工厂方式的资源浪费
既然可以给系统添加prototype也可以给自己的类条件prototype
Function CreatePerson(name,sex){
this.name = name;
this.sex = sex;
}
CreatePerson.prototype.showName = function(){
alert(this.name)
}
CreatePerson.prototype;showSex = function(){
alert(this.sex)
}
Var p1 = new CreatePerson(‘blue’,’男’)
Var p2 = new CreatePerson(‘leo’,’女’);
P1.showName();
P1.showSex();
P2.showName();
P2.showSex()
Alert(p1.showName == p2.showName ); //true
这样就每个对象就不会都有一套自己的方法了
给对象添加方法 大于给prototype添加方法
Array.prototyp.a = 12;
Var arr = [1,2,3];
Alert(arr.a) //12
Arr.a = 5;
Alert(arr.a) //5
Delete arr.a;
Alert(arr.a) //12
点击事件和定时器中的this问题
function Bbb(){
Var _this = thisl;
This.b =12;
Document.getElementByI(‘btn1’).onclick = function(){
_this.show();
}
}
Bbb.prototype.show = function(){
Alert(this.b);
}
Window.onload = function(){
New Bbb();
}
改造为面向对象的技巧:将变量改成对象的属性,将函数改为对象的方法,不允许有函数嵌套
继承:
function Person(name,sex){
This.name = name;
This.sex = sex;
}
Person.prototype.showName = function(){
Alert(this.name);
}
Person.prototype.showSex = function(){
Alert(this.sex);
}
function Worker(name,sex,job){
//调用父级的构造函数 this指向new出来的Work对象
//构造函数伪装
Person.call(this. Name , sex );
This.job = job;
}
//通过原型继承父级的方法 worker原型指向Perons引用,指向的是地址
//这样就是子类影响到父类 所以不适用
//Worker.prototype = Person.prototype;
//(重点)利用原型链来继承父级的方法(将上面改为下边就不影响父类了)
for(var i in Perosn.prototype){
worker.Prototype[i] = Perosn.prototype[i];
}
Worker.prototype.showJob = function(){
Alert(this.job)
}
Var oP= new Person(“Join”,”男”);
Var oW = new Worker(‘blue’, ’男’ ,’打杂的’);
oP.showName();
oP.showSex()
oW.showName()
oW.showSet()l
oW.showJob()
alert(oP.showName == OW.showName) // true
//a1怎么会找到Aaa.prototype下的num呢?
function Aaa(){}
Aaa.prototype.num = 10; //Aaa.prototype也是一个对象
var a1 = new Aaa();
alert(a1.num); //a1怎么会找到Aaa.prototype下的num呢?
原型链:实例对象与原型之间的链接,叫做原型链。
__proto__(隐士链接)。
Object对象类型是原型链的最外层
hasOwnProperty:看是不是对象自身下面的属性
var arr = [];
arr.num = 10;
Array.prototype.num2 = 20;
alert( arr.hasOwnProperty(“num”) ) //true
alert( arr.hasOwnProperty(“num2”) )//false Array.prototype也是一个对象所有数组对象都可以用
constructor:查看对象的构造函数
function Aaa(){}
var a1 = new Aaa();
alert( a1.constructor ); //Aaa函数
var arr = [];
alert( arr.constructor ); //Array函数
alert( arr.constructor == Array ); //true 可以做类型判断
原理:
function Aaa(){}
Aaa.prototype.constructor = Aaa; //系统会自动生成这个
var a1 = new Aaa();
alert( a1.constructor );
instanceof 就是判断某对象是不是 某个类的实例 所有的类都是从Object上继承过来的
例子:
Var arr1 = [1,2,3];
Alert(arr1 instanceof Array);
toString():系统对象下面都是自带的,自己写的对象都是通过原型链object下面的
var arr = [];
alert( arr.toString == Object.prototype.toString ); //false
function Aaa(){}
var a1 = new Aaa();
alert( a1.toString == Object.prototype.toString ); //true
//利用toString做类型判断:
var arr = [];
alert( Object.prototype.toString.call(arr) ); //[object Array]
//做16禁止转化
var num = 255;
alert(num.toString(16)); //ff
//转化成字符串
var arr = [“1”,”2”,”3”];
Array.prototype.toString = function(){
return this.join(“+”);
}
alert( arr.toString() ); //1+2+3
三种方法做类型判断
Amd/cmd
AMD推崇依赖前置,在定义模块的时候就要声明其依赖的模块
CMD推崇就近依赖,只有在用到某个模块的时候再去require
数组去重
<script>
// Array.prototype.unique1 = function()
// {
// // console.log(this); //这里的this是数组中的值
// var n = []; //一个新的临时数组
// for(var i = 0; i < this.length; i++) //遍历当前数组
// {
// //如果当前数组的第i已经保存进了临时数组,那么跳过,
// //否则把当前项push到临时数组里面
// //n.indexOf(this[i]) 指定某个字符串的值在字符串中首次出现的位置
// if (n.indexOf(this[i]) == -1)
// console.log('这是i的值:'+i); //这里遍历的是n这个数组
// n.push(this[i]);
// }
// return n;
// }
Array.prototype.unique2 = function(){
// console.log(this);//表示arr整个数组 是arr对象
var n = {}, r = [];//n为hash表,r为临时数组
for(var i = 0 ; i < this.length; i++){
if(!n[this[i]]){//如果hash表中没有当前项
n[this[i]] = true;//存入hash表
r.push(this[i]);//把当前数组的当前项push到临时数组里面
}
}
return r;
}
for(var i = 0 ; i < arr.length;i++ ){
for(var j = i+1 ; j<arr.length; j++){
if(arr[i] == arr[j]){
arr.splice(j,1);
}
}
}
var arr = ['string',"array","function","string","string"];
arr.unique2();
</script>
JSON去重
Array.prototype.quchong = function(){
var tmp = {},a = this.slice();
for(var i =j= 0 ; i< a.length;i++){
if(!tmp[a[i].id]){
tmp[a[i].id] = 1;
j++;
}else{
this.splice(j,1)
}
}
}
var arr8 = [
{“id”:1},{“id”:1},{“id”:2},{“id”:3},{“id”:1}
]
arr8.quchong()
console.log(arr8)
session和Cookie区别?
HTML5 提供了两种在客户端存储数据的新方法:
localStorage - 没有时间限制的数据存储
sessionStorage - 针对一个 session 的数据存储
之前,这些都是由 cookie 完成的。但是 cookie 不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得 cookie 速度很慢而且效率也不高。
seesion保存在服务器,客户端不知道其中的信息,cookie保存在客户端,服务器能够知道其中的信息
session中保存的是对象,cookie中保存的是字符串
session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到,而cookie中如果设置了路径参数,那么同一个网站中不同路径下cookie互相是访问不到的。
sessin默认需要借助cookie才能正常工作。如果客户端完全静止cookie,session,这种方法将失效,单可以url重写
session在用户会话结束后就会关闭,但cookie因为保存在客户端,可以长期保存
cookie是服务器向客户端写入的片段信息。cookie信息保存在服务器缓存区,不会再客户端显示。当你第一次登陆一个网站,服务器想你的机器写的片段信息,你可以在internet选项找到存放 cookie文件夹。如果不删除就一直在这个文件夹
移动端尺寸:
http://www.cnblogs.com/mingjixiaohui/p/5430947.html
1像素边框问题:
http://www.cnblogs.com/mingjixiaohui/p/5507482.html
高清图片适配
http://www.cnblogs.com/mingjixiaohui/p/5435349.html
javascript方法
indexOf()方法可返回某个指定的字符串值在字符串中首次出现的位置
ceil()方法 向上取整 :
concat()方法 向下取整
substring() 方法用于提取字符串中介于两个指定下标之间的字符。
splice方法用于插入、删除或替换数组的元素。
charAt方法可返回指定位置的字符。
substr()方法可在字符串中抽取从 start 下标开始的指定数目的字符。
slice() 方法可从已有的数组中返回选定的元素。
join()方法用于吧数组中的所有元素放入一个字符串
正则:
正则表达式30分钟入门教程 http://deerchao.net/tutorials/regex/regex.htm
预编译
IE内核,火狐,谷歌内核,css为什么这样写区别?原理
Trident Geako webkit
工具Hbuilder深入了解其功能
Canvas 动画 插件 echars
Bootstrap分页 响应式
移动端事件touch事件库 Hummer.js 和百度的touch.js
相关文章推荐
- 滚动轴承故障特征频率的计算
- Recylerview局部刷新
- java-微信新版自动聊天助手
- Linux下的文件查找命令——find
- jQuery height()、innerHeight()、outerHeight()函数的区别详解
- HDOJ-1698 Just a Hook
- linux内核剖析
- Office加解密方式
- 各类排序算法的对比及实现
- tar压缩解压缩命令详解
- 学习计划
- BaaS模式的开发思路
- 这些HTML、CSS知识点,面试和平时开发都需要 No8-No9
- SQL Server数据类型与Oracle数据类型的对应关系
- Linux中常见的解压压缩文件命令
- java-设计模式实例
- Android点击两次back退出程序的两种方法
- Android中的事件分发机制
- 剑指Offer--046-求1+2+3+...+n
- 分组密码模式: CFB模式(密文反馈模式)