日推荐的GitHub项目是AG Grid,它是一个功能齐全且高度可定制的JavaScript数据网格。AG Grid提供了出色的性能,不需要第三方依赖,并且可以与所有主要的JavaScript框架流畅地集成。
该项目已经收获了8.6k的Star。
项目地址:https://github.com/ag-grid/ag-grid#readme
下图为启用多个过滤器和分组情况下的网格外观。
特性功能
AG Grid可以提供任何网格都具备的标准功能,如下所示。
除此之外,AG Grid还能提供一些特有功能,如下所示。
开始上手
安装依赖
$ npm install --save ag-grid-community
添加一个占位符到HTML
<div id="myGrid" style="height: 150px; width: 600px" class="ag-theme-alpine"></div>
导入网格和风格
import { Grid } from 'ag-grid-community';
import 'ag-grid-community/dist/styles/ag-grid.css';
import 'ag-grid-community/dist/styles/ag-theme-alpine.css';
设置配置
var gridOptions={
columnDefs: [
{ headerName: 'Make', field: 'make' },
{ headerName: 'Model', field: 'model' },
{ headerName: 'Price', field: 'price' }
],
rowData: [
{ make: 'Toyota', model: 'Celica', price: 35000 },
{ make: 'Ford', model: 'Mondeo', price: 32000 },
{ make: 'Porsche', model: 'Boxster', price: 72000 }
]
};
初始化网格
var eGridDiv=document.querySelector('#myGrid');
new Grid(eGridDiv, this.gridOptions);
更多细节请参照原项目。
装对象
我们知道,基本类型值不是对象,因而从逻辑上讲它们不应该有方法。但是为了便于操作基本类型值,JavaScript提供了3个特殊的引用类型:Boolean、Number和String。说其特殊,是因为每当读取一个基本类型值的时候,后台就会创建一个对应的包装对象,从而让我们能够调用一些方法来操作这些数据。
例子:
console.log("love".slice(1)); //输出:ove
对象与包装对象的主要区别就是生存期。后台自动创建的包装对象,只存在于一行代码的执行瞬间,然后立即被销毁。因此我们不能为包装对象添加属性和方法。
例子:
var str="love"; str.name="me"; console.log(str.name); //输出:undefined
*我们也可以显式地调用 String 构造函数来创建字符串对象(Boolean 和Number 也可以),但基本用不到。
例子:
var str=new String("love"); console.log(str); //输出:love
字符串的属性
length 属性
字符串的每个实例都有一个length属性,表示字符串中包含多少个字符。
例子:
console.log("love".length); //输出:4 console.log("妈妈".length); //输出:2 console.log("m e".length); //输出:3
字符串的方法
访问单个字符的方法
charAt()和charCodeAt() 方法
charAt()方法接受一个参数,即基于0的字符位置,返回给定位置的那个字符。charCodeAt() 方法返回字符编码。
例子:
console.log("love".charAt(1)); //输出:o
访问个别字符更为常用的是使用方括号加数字索引的方式。
例子:
console.log("love" [1]); //输出:o
取得字符位置的方法
indexOf()和lastIndexOf() 方法
这两个方法都是从一个字符串中搜索给定的子字符串,然后返回子字符串的位置(如果没有找到该子字符串,则返回-1)。这两个方法的区别在于:indexOf()方法从字符串的开头向后搜索子字符串,而lastInddexOf()方法是从字符串的末尾向前搜索子字符串。这两个方法都可以接收可选的第二个参数,表示从字符串中的哪个位置开始搜索。
例子:
console.log("love".indexOf("o")); //输出:1 console.log("love".indexOf("a")); //输出:-1 console.log("love".indexOf("o", 2)); //输出:-1
includes() 方法
这个方法接受两个参数,第一个参数指定要搜索的文本;第二个参数指定开始搜索的位置的索引值。如果在字符串中检测到指定的文本则返回true。
例子:
console.log("love me".includes("me")); //输出:true console.log("love me".includes(" ")); //输出:true console.log("love me".includes("o", 2)); //输出:false
startsWith()和 endsWith() 方法
这两个方法都接受两个参数,一个参数指定要搜索的文本;第二个参数指定开始搜索的位置的索引值。其中,startsWith() 方法会从字符串起始位置开始匹配,如果检测到指定文本则返回true。endsWith() 方法从字符串末尾位置开始匹配,如果检测到指定文本则返回true。如果指定了第二个参数,则startsWith() 方法会从这个索引值的位置开始匹配。endsWith() 方法从字符串长度减去这个索引值的位置开始匹配。
例子:
console.log("love me!".startsWith("love")); //输出:true console.log("love me!".endsWith("!")); //输出:true console.log("love me!".startsWith("o", 2)); //输出:false console.log("love me!".endsWith("o", 2)); //输出:true
复制子字符并创建新字符串的方法
concat() 方法
concat() 方法用于将一个或多个字符串拼接起来,返回拼接得到的新字符串。
例子:
console.log("love ".concat("me", "!")); //输出:love me!
拼接字符串使用更多的是加号操作符(+)。
例子:
console.log("love " + "me" + "!"); //输出:love me!
substring() 方法
这个方法会返回被操作字符串的一个子字符串,接受的两个参数分别指定子字符串的开始位置和结束位置(不包括结束位置的字符)。如果没有传递第二个参数,则将字符串的长度作为结束位置。当传入的参数是负值时,substring()方法会把所有负值参数都转换为0。
例子:
console.log("love me".substring(0)); //输出:love me console.log("love me".substring(0, 4)); //输出:love console.log("love me".substring(-1)); //输出:love me
substr() 方法
这个方法会返回被操作字符串的一个子字符串,接受的两个参数分别指定子字符串的开始位置和返回的字符个数。如果没有传递第二个参数,则将字符串的长度作为结束位置。当传入的参数是负值时,substr()方法将负的第一个参数加上字符串的长度,而将负的第二个参数转换为0。
例子:
console.log("love me".substr(0)); //输出:love me console.log("love me".substr(0, 1)); //输出:l console.log("love me".substr(-1)); //输出:e
slice() 方法
这个方法会返回被操作字符串的一个子字符串,接受的两个参数分别指定子字符串的开始位置和结束位置(不包括结束位置的字符)。如果没有传递第二个参数,则将字符串的长度作为结束位置。当传入的参数是负值时,slice()方法会将传入的负值与字符串的长度相加。
例子:
console.log("love me".slice(0)); //输出:love me console.log("love me".slice(0, 4)); //输出:love console.log("love me".slice(-2)); //输出:me
repeat() 方法
这个方法接受一个number类型的参数,表示该字符串的重复次数,返回当前字符串重复一定次数后的新字符串。
例子:
console.log("0".repeat(2).concat("7")); //输出:007
操作字符串前后内容的方法
trim()方法
这个方法删除字符串前后的所有空格,返回没有前后空格的新字符串。
例子:
console.log(" love ".trim()); //输出:love
padStart()和padEnd() 方法
这两个方法用于字符串的补全功能,一共接受两个参数,第一个参数是字符串补全生效的最大长度,第二个参数是用来补全的字符串。如果省略第二个参数,默认使用空格补全长度。其中,padStart()用于头部补全,padEnd()用于尾部补全。返回补全之后的新字符串。
例子:
console.log("7".padStart(3, "0")); //输出:007 console.log("7".padEnd(3, "0")); //输出:700
字符串大小写转换方法
toLowerCase()和toUpperCase() 方法
例子:
console.log("LOVE".toLowerCase()); //输出:love console.log("love".toUpperCase()); //输出:LOVE
字符串转为数组的方法
split() 方法
这个方法用于把一个字符串分割成数组并返回该数组,接受两个参数,第一个参数可以是字符串或正则表达式,表示从该参数指定的地方分割;第二个参数用于指定数组的最大长度。
例子:
console.log("love".split()); //输出:["love"] console.log("love".split("")); //输出:["l", "o", "v", "e"] console.log("lo,ve".split(",")); //输出:["lo", "ve"] console.log("l,o,v,e".split(",", 2)); //输出:["l", "o"]
字符串用于正则匹配的方法
match() 方法
这个方法只接受一个正则表达式作为参数,可在字符串内检索匹配的文本并返回一个数组。这个方法的行为在很大程度上依赖于正则表达式是否具有标志 g。如果正则表达式没有标志 g,那么 match() 方法就只会在字符串中执行一次匹配。
例子:
var str="A;B;C;" var m=str.match(/.;/g); console.log(m); //输出:["A;", "B;", "C;"]
replace() 方法
这个方法用于在字符串中用一些字符替换另一些字符。接受两个参数:第一个参数可以是一个正则表达式或者一个字符串,表示检索文本,第二个参数可以是一个字符串或者一个函数,表示替换文本。如果第一个参数是字符串,那么只会替换第一个子字符串。要想替换所有子字符串,唯一的办法就是提供一个正则表达式,而且要指定全局(g)。该方法返回替换后新创建的字符串。
例子:
var str="a_1;a_1;a_1"; var new_str_1=str.replace(1, 2); var new_str_2=str.replace(/1/g, 2); console.log(new_str_1); //输出:a_2;a_1;a_1 console.log(new_str_2); //输出:a_2;a_2;a_2
ES6的模板字符串
模板字符串是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。
基本用法
1、用反引号替换单、双引号。
例子:
let str=`love`; console.log(str); //输出:love
在模板字符串中不需要转义单、双引号。但如果想在字符串中使用反引号,则要用反斜杠(\)进行转义。
例子:
let str1=`I am a "fool"`; let str2=`I am a \`fool\``; console.log(str1); //输出:I am a "fool" console.log(str2); //输出:I am a `fool`
2、ES6之前,创建多行字符串我们通常会在字符串中手动加入换行符(\n):
例子:
var str=["A", "B", "C"].join("\n"); console.log(str); //输出:A B C (多行显示)
但在ES6的模板字符串中,如果需要在字符串中添加新的一行,只需在代码中直接换行:
例子:
let str=`A B C`; console.log(str); //输出: A B C (多行显示)
*在反引号中的所有空白符都属于字符串的一部分,所以要小心缩进。
3、在模板字符串中,可以把任何合法的JavaScript 表达式嵌入到 ${} 占位符之中。
例子:
变量和表达式
let n1=1, n2=2; let str=`${n1}+${n2}=${n1+n2}`; console.log(str); //输出:1+2=3
函数
let fn=()=> "love"; let str=`${fn()} me`; console.log(str); //输出:love me
模板字符串本身也是JavaScript 表达式,因此也可以在模板字符串里面嵌入另一个。
例子:
let name="Tom"; let str=`hello,${`my name is ${name}.`}`; console.log(str); //输出:hello,my name is Tom.
Boolean、Number
包装对象的两外两个 :Boolean和 Number ,由于实际应用比较少,所以在此不再叙述
https://zhuanlan.zhihu.com/p/53949660
作者:为爱心太软
来源:慕课网
ransform变形
transform在字面上就是变形、改变之意。
CSS3的transform主要包括rotate(旋转)、skew(扭曲)、scale(缩放)和translate(移动)以及matrix(矩形变形)。
rotate使用格式:(取值范围0-360, 单位deg)
rotate(10deg)
rotate(360deg)
rotateX(angle) 定义沿着 X 轴的 3D 旋转。
rotateY(angle) 定义沿着 Y 轴的 3D 旋转。
rotateZ(angle) 定义沿着 Z 轴的 3D 旋转。
角度等同于钟表: 12点: 0deg 3点: 90deg 6点: 180deg 9点: 270deg
【实例】
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>图片转换演示</title>
<style type="text/css">
img{
width:460px;
height:480px;
border-radius:50%;
transition:1s;
}
/*
过渡到···deg,而不是过渡···deg
*/
img:hover{
/*transform: rotate(45deg);*/
transform: rotateX(45deg);/*沿着x轴旋转*/
transform: rotateY(45deg);/*沿着y轴旋转*/
transform: rotateZ(45deg);/*沿着z轴旋转*/
/*正数顺时针*/
transform: rotate(45deg);/*z轴*/
/*负数逆时针*/
transform: rotate(-45deg);/*z轴*/
}
</style>
</head>
<body>
<img src="http://p1.ifengimg.com/2018_42/C03628FF6F4ED06948E0A488AD90E26E780BA05E_w981_h658.jpg"/>
</body>
</html>
transform-origin: 设置旋转元素的基点位置
实例2: 旋转基点
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
img{
width: 300px;
height: 220px;
display: block;
margin: 100px auto;
transition: 1s linear;
/*我们的旋转基点默认是中心*/
/*规定旋转基点的
* ①方位名词left top bottom right center
* ②px(注意坐标原点为左上角)
* ③%(参考的是宽高)*/
transform-origin: center center;
transform-origin: right top;
transform-origin: -300px 110px;
transform-origin: 150px 110px;
transform-origin: 50% 50%;
transform-origin: 100% 100%;
}
body:hover>img{
transform: rotateX(45deg);/*沿着x轴旋转*/
transform: rotateY(45deg);/*沿着y轴旋转*/
transform: rotateZ(45deg);/*沿着z轴旋转*/
transform: rotate(360deg);/*z轴*/
}
</style>
</head>
<body>
<img src="img/薛凯琪.jpg"/>
</body>
</html>
skew使用格式:(取值范围0-180, 单位deg)
skew(10deg,10deg)
skew(180deg,180deg)
实例: 斜切
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
list-style: none;
}
img{
width: 400px;
height: 300px;
display: block;
margin: 100px auto;
transition: 1s;
}
img:hover{
transform: skewX(45deg);
transform: skewX(-45deg);
transform: skewY(45deg);
transform: skewY(-45deg);
/*skew(x轴斜切角度,y轴斜切角度)*/
/*skew(x,y)同步动画*/
/*transform: skew(45deg,45deg);*/
/*现在x斜切基础之上再进行y斜切*/
transform: skewX(45deg) skewY(45deg);
transform: skewY(45deg) skewX(45deg);
}
</style>
</head>
<body>
<img src="img/薛凯琪.jpg"/>
</body>
</html>
scale使用格式:
scale(0.2)
scale(2)
scale(2,3)
scale(0.5,2)
实例: 缩放
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
list-style: none;
}
img{
width: 400px;
height: 300px;
display: block;
margin: 100px auto;
transition: 1s;
}
img:hover{
transform: scale(1);/*本身*/
transform: scale(2);/*扩大*/
transform: scale(0.5);/*扩大*/
transform: scale(-1);/*倒立*/
transform: scale(-2);/*倒立放大2倍*/
transform: scale(-0.5);/*倒立缩小1半*/
}
</style>
</head>
<body>
<img src="img/薛凯琪.jpg"/>
</body>
</html>
translate使用格式:
translate(10px)
translate(20px,20px)
translate(-25px,-25px)
实例: 平移
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
<style type="text/css">
img{
width: 400px;
display: block;
margin: 100px auto;
transition: 1s;
}
img:hover{
transform: translateX(100px);
transform: translateX(-100px);
transform: translateY(100px);
transform: translateY(-100px);
transform: translate(100px,100px);
/*%参考的是各自的宽和高*/
transform: translateX(100%);
transform: translateY(100%);
}
</style>
</head>
<body>
<img src="img/薛凯琪.jpg"/>
</body>
</html>
综合使用: 旋转、斜切、缩放
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
div{
width: 400px;
height: 300px;
margin: 100px auto;
background-color: orange;
transition: 1s;
}
div:hover{
/*transform: rotate(360deg);
transform: skew(45deg);*/
/*综合使用*/
transform: rotate(360deg) skew(45deg) scale(0.5);
}
</style>
</head>
<body>
<div></div>
</body>
</html>
css3新增特性都不会对盒子模型产生影响, 盒子模型大概永远是由width/height+padding+border+marign组成
*请认真填写需求信息,我们会在24小时内与您取得联系。