<script type="text/javascript" src="路径/文件名.js"></script>
xxxxxxxxxx
<script type="text/javascript">js代码</script>
xxxxxxxxxx
<input type="button" value="行内引入方式" onclick="javascript:alert('我是行内引入方式');">
使用style属性引入CSS样式。实际在写页面时不提倡使用,在测试的时候可以使用。
xxxxxxxxxx
<h1 style="color:red;">style属性的应用</h1>
<p style="font-size:14px;color:green;">直接在HTML标签中设置的样式</p>
在style标签中书写CSS代码。style标签写在head标签中。
xxxxxxxxxx
<head>
<style type="text/css">
h3{
color:red;
}
</style>
</head>
CSS代码保存在扩展名为.css的样式表中 HTML文件引用扩展名为.css的样式表,有两种方式:链接式、导入式。
xxxxxxxxxx
<link type="text/css" rel="styleSheet" href="CSS文件路径" />
xxxxxxxxxx
```
<style type="text/css">
@import url("css文件路径");
</style>
<head>
<meta charset="utf-8" />
<title>外部样式表</title>
<!--链接式:推荐使用-->
<link rel="stylesheet" type="text/css" href="css/style.css" />
<!--导入式-->
<style type="text/css">
@import url("css/style.css");
</style>
</head>
xxxxxxxxxx
* <link>
1、属于XHTML
2、优先加载CSS文件到页面
* @import
1、属于CSS2.1
2、先加载HTML结构再加载CSS文件。
行内样式>内部样式>外部样式(后两者是就近原则)
x<input id="myInput" type="text" placeholder="请输入想说的话...">
$("#myInput").on("input", function () {
//实时显示输入的值
$("#result").text($(this).val());
});
FileReader是一种异步读取文件机制,结合input:file可以很方便的读取本地文件。
1、首先需要实例化一个FileReader对象
2、FileReader提供的方法:
①readAsArrayBuffer(file): 按字节读取文件内容,结果用ArrayBuffer对象表示;
②readAsBinaryString(file): 按字节读取文件内容,结果为文件的二进制串;
③readAsDataURL(file): 读取文件内容,结果用data:url的字符串形式表示;
④readAsText(file,encoding): 按字符读取文件内容,结果用字符串形式表示;
⑤abort(): 终止文件读取操作.
其中readAsDataURL和readAsText较为常用,这里只对这两者进行说明。
3.1readAsDataURL会将文件内容进行base64编码后输出:
xxxxxxxxxx
var inputBox = document.getElementById("inputBox"); // dom对象
inputBox.addEventListener("change",function(){
var reader = new FileReader();
reader.readAsDataURL(inputBox.files[0]);//发起异步请求
reader.onload = function(){
//读取完成后,数据保存在对象的result属性中
console.log(this.result);//base64内容显示
}
})
3.2由于媒体文件的src属性,可以通过采用网络地址或base64的方式显示,因此我们可以利用readAsDataURL实现对图片的预览。
xxxxxxxxxx
<input type="file" id="inputBox" >
<img src="" id="img">
var inputBox = document.getElementById("inputBox");
var img = document.getElementById("img");
inputBox.addEventListener("change",function(){
var reader = new FileReader();
reader.readAsDataURL(inputBox.files[0]);//发起异步请求
reader.onload = function(){
//读取完成后,将结果赋值给img的src
img.src = this.result;
}
})
xxxxxxxxxx
var arrayObj = new Array(); //创建一个数组
var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度
a[0] = 10;
a[1] = "aaa";
a[2] = 12.6;
// 可以实例化的时候直接赋值
var a = new Array(1, 2, 3, 4, 5);
var b = [1, 2, 3, 4, 5];
xxxxxxxxxx
var testGetArrValue=arrayObj[1]; //获取数组的元素值
arrayObj[1]= "这是新值"; //给数组元素赋予新的值
xxxxxxxxxx
var a = ["aa","bb","cc"];
console.log(a.push("dd")); // -> 4
console.log(a); // -> aa,bb,cc,dd
console.log(a.push([1,2,3])); // -> 5
console.log(a); // -> aa,bb,cc,dd,1,2,3
//跟concat的区别在于,concat不影响原数组,直接返回新数组,而push则直接修改原数组,返回的是数组新长度
splice() 方法,可以删除数组中的指定元素。
删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返回所移除的元素;
常用实例:
xxxxxxxxxx
var arr = ['a','b','c','d'];
arr.splice($.inArray('c',arr),1);
// 结果:arr =['a','b','d']
xxxxxxxxxx
var a = ["aa","bb","cc"];
console.log
console.log(a.pop()); // -> cc
console.log(a); // -> aa, bb
var a = [1,2,3,4,5,6,7,8,9];
console.log(a.splice(3,2)); // -> 4,5
console.log(a); // -> 1,2,3,6,7,8,9
xxxxxxxxxx
var a = [123];
var b = "sunnycat";
var c = ["www",21,"ido"];
var d = {x:3.14, y:"SK"};
var e = [1,2,3,4,[5,6,[7,8]]];
alert(a.concat(b)); // -> 123,sunnycat
alert(a); // -> 123
alert(b.concat(c, d)); // -> sunnycatwww,21,ido[object Object]
alert(c.concat(b)); // -> www,21,ido,sunnycat
alert(e.concat(11,22,33).join(" # ")); // -> 1 # 2 # 3 # 4 # 5,6,7,8 # 11 # 22 # 33
需要注意的是只能用于数组或字符串,如果被连接(前面的a)的是数值、布尔值、对象,就会报错,字符串连接数组时,字符串会跟数组首元素拼接成新元素,而数组连接字符串则会追加新元素(这点我也不清楚原委,知情者请透露),对于数组里面包含数组、对象的,连接后保持原样
xxxxxxxxxx
var a = ['a','b','c','d','e','f','g'];
alert(a.join(" * ")); // -> a * b * c * d * e * f * g
each遍历是for循环的变体,但比for循环强大.在数组中,它可以轻松的获取数组索引及对应的值。如果需要退出 each 循环可使回调函数返回 false。
xxxxxxxxxx
var _mozi=['墨家','墨子','墨翟','兼爱非攻','尚同尚贤']; //本文所用到的数组, 下同
$.each(_mozi,function(key,val){
//回调函数有两个参数,第一个是元素索引,第二个为当前值
alert('_mozi数组中 ,索引 : '+key+' 对应的值为: '+val);
});
$.grep() 函数使用指定的函数过滤数组中的元素,并返回过滤后的数组。
提示:源数组不会受到影响,过滤结果只反映在返回的结果数组中。
语法
xxxxxxxxxx
$.grep( array, function(elementOfArray, indexInArray) [, invert ] )
参数 | 描述 |
---|---|
array | Array类型 将被过滤的数组。 |
function | Function类型 指定的过滤函数。grep()方法为function提供了两个参数:其一为当前迭代的数组元素,其二是当前迭代元素在数组中的索引。 |
invert | 可选。 Boolean类型 默认值为false,指定是否反转过滤结果。如果参数invert为true,则结果数组将包含function返回false的所有元素。 |
例:
xxxxxxxxxx
<div></div>
<p></p>
<span></span>
<script>
$(function () {
// 选出数组里面不大于5,且索引号大于4的元素。
var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];
$( "div" ).text( arr.join( ", " ) );
arr = jQuery.grep(arr, function( element, index ) {
return ( element > 5 && index > 4 );
});
// 选出数组里面不等于9的元素
$( "p" ).text( arr.join( ", " ) );
arr = $.grep(arr, function( a ) {
return a == 9;
true },);
$( "span" ).text( arr.join( ", " ) );
});
解释: 确定第一个参数在数组中的位置, 从0开始计数(如果没有找到则返回 -1 。
解释:对于array中的每个元素,调用callback()函数,最终返回一个新的数组,原数组不变。
xxxxxxxxxx
$(function () {
var arrInt = [1, 3, 5, 79];
//map返回来的是一个新数组,第个值乘2
var b = $.map(arrInt, function (value, key) {
return value * 2;
});
console.log(b); // b.join(","),使用“,”符号连接成字符串
})
解释: 返回的结果会修改第一个数组的内容——第一个数组的元素后面跟着第二个数组的元素;
这个方法是用jQuery的方法替代原生concat()方法, 但功能并没有concat()强大, concat()可以同时合并多个数组。
解释: 删除数组中重复元素. 只处理删除DOM元素数组,而不能处理字符串或者数字数组. 第一次看到这个方法,觉得这是个很便捷的方法, 可以过滤重复, 哈, 多完美, 但仔细一看, 仅限处理DOM元素. 功能8折了.所以, 我给它定义成了一个不常用的元素, 至少, 我用jQuery以来没用到过它
解释: 将类数组对象转换为数组对象, 类数组对象有 length 属性,其成员索引为0至 length-1. 这是个多余的方法, 无所不能的$本来就包含了这个功能. jQuery官网上解释的非常模糊. 其实, 它就是将某个类数组对象(比如用getElementsByTagName获取的元素对象集合)转换成数组对象.
解释: 把jQuery集合中所有DOM元素恢复成一个数组; 并不常用的方法, 个人甚至觉得它和$.makeArray一样多余.
xxxxxxxxxx
// 利用filter方法来遍历是否有相同的元素
var arr3 = arr2.filter(function(v){
return arr1.indexOf(v)!==-1
});
// ES7写法
let intersection = a.filter(v => b.includes(v))
xxxxxxxxxx
var result = arr2.concat(arr3 ).filter(function (v) {
return arr2.indexOf(v)===-1 || arr3 .indexOf(v)===-1
});
// ES7写法
let difference = a.concat(b).filter(v => !a.includes(v) || !b.includes(v))
xxxxxxxxxx
var a = [1,2,3,4,5]
var b = [2,4,6,8,10]
console.log("数组a:", a);
console.log("数组b:", b);
// 交集
let intersect = $(a).filter(b).toArray();
// 差集
let minus = $(a).not(b).toArray();
// 补集
let complement = $(a).not(b).toArray().concat($(b).not(a).toArray());
// 并集
let unionSet = $.unique(a.concat(b));
console.log("a与b的交集:", intersect);
console.log("a与b的差集:", minus);
console.log("a与b的补集:", complement);
console.log("a与b的并集:", unionSet);
注意:数组a和b的顺序不一样,结果不一样,使用之前最好测试看下结果
在 ES6 中我们可以借助扩展运算符(…)以及 Set 的特性实现相关计算,代码也会更加简单些。
xxxxxxxxxx
var a = [1,2,3,4,5]
var b = [2,4,6,8,10]
console.log("数组a:", a);
console.log("数组b:", b);
var sa = new Set(a);
var sb = new Set(b);
// 交集
let intersect = a.filter(x => sb.has(x));
// 差集
let minus = a.filter(x => !sb.has(x));
// 补集
let complement = [...a.filter(x => !sb.has(x)), ...b.filter(x => !sa.has(x))];
// 并集
let unionSet = Array.from(new Set([...a, ...b]));
console.log("a与b的交集:", intersect);
console.log("a与b的差集:", minus);
console.log("a与b的补集:", complement);
console.log("a与b的并集:", unionSet);
xxxxxxxxxx
var a = [1,2,3,4,5]
var b = [2,4,6,8,10]
//交集
var c = a.filter(function(v){ return b.indexOf(v) > -1 })
//差集
var d = a.filter(function(v){ return b.indexOf(v) == -1 })
//补集
var e = a.filter(function(v){ return !(b.indexOf(v) > -1) })
.concat(b.filter(function(v){ return !(a.indexOf(v) > -1)}))
//并集
var f = a.concat(b.filter(function(v){ return !(a.indexOf(v) > -1)}));
console.log("数组a:", a);
console.log("数组b:", b);
console.log("a与b的交集:", c);
console.log("a与b的差集:", d);
console.log("a与b的补集:", e);
console.log("a与b的并集:", f);
xxxxxxxxxx
//数组功能扩展
//数组迭代函数
Array.prototype.each = function(fn){
fn = fn || Function.K;
var a = [];
var args = Array.prototype.slice.call(arguments, 1);
for(var i = 0; i < this.length; i++){
var res = fn.apply(this,[this[i],i].concat(args));
if(res != null) a.push(res);
}
return a;
};
//数组是否包含指定元素
Array.prototype.contains = function(suArr){
for(var i = 0; i < this.length; i ++){
if(this[i] == suArr){
return true;
}
}
return false;
}
//不重复元素构成的数组
Array.prototype.uniquelize = function(){
var ra = new Array();
for(var i = 0; i < this.length; i ++){
if(!ra.contains(this[i])){
ra.push(this[i]);
}
}
return ra;
};
//两个数组的交集
Array.intersect = function(a, b){
return a.uniquelize().each(function(o){return b.contains(o) ? o : null});
};
//两个数组的差集
Array.minus = function(a, b){
return a.uniquelize().each(function(o){return b.contains(o) ? null : o});
};
//两个数组的补集
Array.complement = function(a, b){
return Array.minus(Array.union(a, b),Array.intersect(a, b));
};
//两个数组并集
Array.union = function(a, b){
return a.concat(b).uniquelize();
};
xxxxxxxxxx
var a = [1,2,3,4,5]
var b = [2,4,6,8,10]
console.log("数组a:", a);
console.log("数组b:", b);
console.log("a与b的交集:", Array.intersect(a, b));
console.log("a与b的差集:", Array.minus(a, b));
console.log("a与b的补集:", Array.complement(a, b));
console.log("a与b的并集:", Array.union(a, b));
$("#div")得到的是[object Object],即jquery对象。
document.getElementById("div")得到的是[object HTMLDivElement],即dom对象。
两种方法:[index]和.get(index)
$("#div")[0]或者$("#div").get(0)
只需要用$()把DOM对象包装起来。
var v = document.getElementById("myID"); //DOM对象 var $v = $(myID); //jQuery对象
语法:event.target
规定返回的最后一个值来自哪个事件。这个 event 参数来自事件绑定函数。
例:显示哪个 DOM 元素触发了事件
xxxxxxxxxx
<h1>这是一个标题</h1>
<h2>这是另一个标题</h2>
<p>这是一个段落</p>
<button>这是一个按钮</button>
<div id="output"></div>
$("p, button, h1, h2").click(function(event){
$("#output").html("点击事件由一个 " + event.target.nodeName + " 元素触发");
});
字符 | 描述 |
---|---|
\ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。 |
^ | 匹配输入字符串的开始位置;除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 \^。 |
$ | 匹配输入字符串的结束位置。 |
* | 匹配前面的子表达式零次或多次。 |
+ | 匹配前面的子表达式一次或多次。 |
? | 匹配前面的子表达式零次或一次。等价于 {0,1}。指明一个非贪婪限定符 |
. | 匹配除换行符“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像"(.|\n) ”的模式。 |
{n} | n是一个非负整数。匹配确定的n次。例如,“o{2} ”不能匹配“Bob ”中的“o ”,但是能匹配“food ”中的两个o。 |
{n,} | n是一个非负整数。至少匹配n次。例如,“o{2,} ”不能匹配“Bob ”中的“o ”,但能匹配“foooood ”中的所有o。“o{1,} ”等价于“o+ ”。“o{0,} ”则等价于“o ”。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。请注意在逗号和两个数之间不能有空格。'o{0,1}' 等价于 'o?'。 |
| | 指明两项之间的一个选择。 |
( ) | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。 |
\n | 匹配一个换行符。等价于 \x0a 和 \cJ。 |
\r | 匹配一个回车符。等价于 \x0d 和 \cM。 |
\t | 匹配一个制表符。等价于 \x09 和 \cI。 |
\v | 匹配一个垂直制表符。等价于 \x0b 和 \cK。 |
\f | 匹配一个换页符。等价于 \x0c 和 \cL。 |
\d | 匹配一个数字字符。等价于 [0-9] |
\D | 匹配一个非数字字符。等价于 [^0-9] |
\w | 匹配字母、数字、下划线。等价于[A-Za-z0-9_] |
\W | 匹配非字母、数字、下划线。等价于 [^A-Za-z0-9_] |
\s | 匹配任何空白字符,包括空格、制表符、换行符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。 |
\S | 匹配任何非空白字符。等价于 “[^ \f\n\r\t\v] ”。 |
(pattern) | 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '(' 或 ')'。 |
(?:pattern) | 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。 |
(?=pattern) | 正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 |
(?!pattern) | 正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如"Windows(?!95|98|NT|2000)"能匹配"Windows3.1"中的"Windows",但不能匹配"Windows2000"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 |
修饰符 | 描述 |
---|---|
i | ignore - 不区分大小写 |
g | global - 全局匹配;查找所有的匹配项 |
m | multi line - 多行匹配 |
匹配空行 | /^\s*$/ |
---|---|
中文字符 | [\u4e00-\u9fa5] |
匹配 HTML 标记 | /<\s(\S+)(\s[^>])?>[\s\S]<\s\/\1\s*>/ |
格式:stringObj.match(rgExp)
stringObj为字符串必选 ;rgExp为正则表达式必选项。
返回值:如果能匹配则返回结果数组,如果不能匹配返回null。
我们必须明确的是,这个方法跟其他语言是不同的。
全局标示g
当有g时,匹配整个字符串;当无g时,匹配首次的子符串。 var reg = / 正则表达式 /g
xxxxxxxxxx
var str = 'AAA18BBB99CCC86DDD13';
var res = str.match(/\d+/); //只能匹配字符串中出现的首个数字,未使用全局匹配符g
// 结果:res=[18]
// 当有g时:res = [18,99,86,13]
test() 方法用于检测一个字符串是否匹配某个模式.
语法:RegExpObject.test(string)
返回值:如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false。
xxxxxxxxxx
import re
s = '3123C72D1D8E67'
r = re.match('\d',s)
print(r)
r1 = re.search('\d',s)
print(r1.group())
r2 = re.findall('\d',s)
结果
xxxxxxxxxx
<_sre.SRE_Match object; span=(0, 1), match='3'>
3
['3', '1', '2', '3', '7', '2', '1', '8', '6', '7']
setInterval(code, milliseconds); setInterval(function, milliseconds, param1, param2, ...)
参数 | 描述 |
---|---|
code/function | 必需。要调用一个代码串,也可以是一个函数。 |
milliseconds | 必须。周期性执行或调用 code/function 之间的时间间隔,以毫秒计。 |
param1, param2, ... | 可选。 传给执行函数的其他参数(IE9 及其更早版本不支持该参数)。 |
clearInterval(id_of_setinterval)
clearInterval() 方法可取消由 setInterval() 函数设定的定时执行操作。
clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。
setInterval()产生一个定时器,定义一个定时器标识 ;使用 clearInterval(定时器标识) 来停止。
xxxxxxxxxx
var mytag;
function jump(){
………… //函数内容
}
mytag = setInterval("jump",5000); //每个5秒调用一次函数
// 当需要停止时
$("#mydiv").click(function(){
clearInterval(mytag);
};
});
xxxxxxxxxx
var mytag;
function autoPlay(){
mytag = setInterval(function(){
………… // 函数内容
},5000); // 每5秒执行一行
}
autoPlay(); // 调用函数
// 当需要停止时
$("#mydiv").click(function(){
clearInterval(mytag);
};
});
setInterval与clearInterval都是直属于window对象。
第一种用法思路比较清晰,先设置一个函数,在通过setInterval来自行调用,但是将其在别处调用比较困难;
第二种方法看起来比较乱,在setInterval内部写下自行调用的函数,然后在给他套上一个有名函数,然后通过调用有名函数来实行自动,在别处调用比较方便。
跳出each循环
return false 跳出循环
return true 进入下一个循环
跳出for循环
break 直接退出for这个循环。这个循环将不再被执行! continue 直接跳出本次for循环。下次继续执行。 return语句就是用于指定函数返回的值。即使函数主体中还有其他语句,函数执行也会停止!
inline-block
text-align:center; line-height:50px;
block
margin:auto;
$(this).attr("id")
$(this).attr("class")
xxxxxxxxxx
var file = $("#file")
file.after(file.clone().val(""));
file.remove();
xxxxxxxxxx
.bodystyle::before{
content: " ";
position: fixed;
z-index: -1;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-image: url(bglog.png);
background-repeat: repeat;
opacity: 0.1;
}
在一个声明中设置所有背景属性
xxxxxxxxxx
background: #00FF00 url(bgimage.gif) no-repeat fixed top;
参数 | 描述 |
---|---|
background-color | 规定要使用的背景颜色。 |
background-position | 规定背景图像的位置。 |
background-size | 规定背景图片的尺寸。 |
background-repeat | 规定如何重复背景图像。 |
background-origin | 规定背景图片的定位区域。 |
background-clip | 规定背景的绘制区域。 |
background-attachment | 规定背景图像是否固定或者随着页面的其余部分滚动。 |
background-image | 规定要使用的背景图像。 |
inherit | 规定应该从父元素继承 background 属性的设置。 |
用来设置背景图像的铺排填充方式, 默认值: repeat 。
repeat 表示横向纵向上均平铺;
no-repeat 表示不平铺;
repeat-x 表示横向上平铺,
repeat-y 表示纵向上平铺
round 表示背景图像自动缩放直到适应且填充满整个容器。 注意: 当设置为 round 时, background-size 的 cover 和 contain 属性失效。
space 表示背景图像以相同的间距平铺且填充满整个容器或某个方向. 注意: 当 background-size 设置为 cover 和 contain 时, background-rapeat 的 space 属性失效。
用来设置背景图像的位置, 默认值: 0% 0%, 效果等同于 left top。
如果设置一个值, 则该值作用在横坐标上, 纵坐标默认为50%(即center) ; 如果设置两个值, 则第一个值作用于横坐标, 第二个值作用于纵坐标,
取值可以是方位关键字[left\top\center\right\bottom], 如 background-position: left center ;
也可以是百分比或长度, 百分比和长度可为设置为负值, 如: background-position: 10% 30px ;
用来设置背景图像是随对象内容滚动还是固定的,默认值 scroll。
fixed 背景图像相对窗体固定,即内容滚动时,图片不动; scroll 相对元素固定,背景图像跟随元素本身,元素内容滚动时背景图像不动; local 相对元素内容固定,背景图像跟随元素内容。
mouseover 事件在鼠标指针进入被选元素或任意子元素时都会被触发,
mouseenter 事件只有在鼠标指针进入被选元素时被触发。
1.mouseover与mouseout
2.mouseenter与 mouseleave
css3为了区分伪类和伪元素,伪元素采用双冒号写法。
常见伪类——:hover,:link,:active,:target,:not(),:focus 常见伪元素——::first-letter,::first-line,::before,::after,::selection
::before和::after下特有的content,用于在css渲染中向元素逻辑上的头部或尾部添加内容。
这些添加不会出现在DOM中,不会改变文档内容,不可复制,仅仅是在css渲染层加入。
所以不要用:before或:after展示有实际意义的内容,尽量使用它们显示修饰性内容。
content属性
::before和::after必须配合content属性来使用,content用来定义插入的内容,content必须有值,至少是空。默认情况下,伪类元素的display是默认值inline,可以通过设置display:block来改变其显示。
string
使用引号包一段字符串,将会向元素内容中添加字符串。如:a:after{content:""}
attr()
通过attr()调用当前元素的属性,比如将图片alt提示文字或者链接的href地址显示出来。
xxxxxxxxxx
<style type="text/css">
a::after{
content: "(" attr(href) ")";
}
</style>
<a href="http://www.cnblogs.com/starof">starof</a>
url()/uri()
用于引用媒体文件。
xxxxxxxxxx
a::before{
content: url("https://www.baidu.com/img/baidu_jgylogo3.gif");
}
counter()
调用计数器,可以不使用列表元素实现序号功能。配合counter-increment和counter-reset属性使用:
h2:before { counter-increment: chapter; content: "Chapter " counter(chapter) ". " }
xxxxxxxxxx
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JS读取本地文件</title>
</head>
<body>
<div>
<div>方法一</div>
<input type="file" id="myID1" style="display: none" onchange="fileImport();">
<input type="button" id="fileImportBtn" value="导入">
<div>方法二</div>
<input type="file" id="myID2" onchange="fileImport2();">
</div>
<div id="output"></div>
<!-- <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script> -->
<script src="./jquery-3.5.0.min.js"></script>
<script>
//点击导入按钮,使files触发点击事件,然后完成读取文件的操作
$("#fileImportBtn").click(function() {
$("#myID1").click();
})
function fileImport() {
//获取读取我文件的File对象
var selectedFile = document.getElementById('myID1').files[0];
// var selectedFile = $('#myID1').get(0).files[0]; // 与上一行等价
var name = selectedFile.name; //读取选中文件的文件名
var size = selectedFile.size; //读取选中文件的大小
console.log("文件名:" + name + "大小:" + size);
var reader = new FileReader(); //这是核心,读取操作就是由它完成.
reader.readAsText(selectedFile,"GBK"); //读取文件的内容,也可以读取文件的URL
reader.onload = function() {
//当读取完成后回调这个函数,然后此时文件的内容存储到了result中,直接操作即可
console.log(this.result);
$("#output").html(this.result);
}
}
</script>
<script type="text/javascript">
// 定义函数
function fileImport2(){
//获取读取我文件的File对象
var selectedFile = $('#myID2').get(0).files[0];
var reader = new FileReader(); //这是核心,读取操作就是由它完成.
reader.readAsText(selectedFile,"GBK"); //读取文件的内容,也可以读取文件的URL
reader.onload = function(){
//当读取完成后回调这个函数,然后此时文件的内容存储到了result中,直接操作即可
console.log(this.result); // 与reader.result一样
$("#output").html(this.result);
};
};
</script>
</body>
</html>
xxxxxxxxxx
// 参数str为读取出的字符
function getArray(str){
var re = /(\r\n|\n)/g;
var tmpStr = str.replace(re,",");
var Arr = tmpStr.split(",");
// $.grep筛选或者使用for循环过滤掉空值
var newArr = $.grep(Arr,function(element,index){ return element==""},true)
console.log("新数组:\n",newArr);
};
以前一直认为jquery中的$("#id")和document.getElementById("id")得到的效果是一样的,今天做特效的时候才发现并不是这么一回事,通过测试得到:
1、alert($("#div"))得到的是[object Object]
2、alert(document.getElementById("div"))得到的是[object HTMLDivElement]
3、alert($("#div")[0])或者alert($("#div").get(0))得到的是[object HTMLDivElement]
原因解读:
document.getElementById()返回的是DOM对象,而$()返回的是jQuery对象
---就是通过jQuery包装DOM对象后产生的对象。jQuery对象是jQuery独有的,其可以使用jQuery里的方法。 比如: $("#test").html() 意思是指:获取ID为test的元素内的html代码。其中html()是jQuery里的方法** 这段代码等同于用DOM实现代码: document.getElementById("id").innerHTML; 虽 然jQuery对象是包装DOM对象后产生的,但是jQuery无法使用DOM对象的任何方法,同理DOM对象也不能使用jQuery里的方法.乱使用会 报错。比如:$("#test").innerHTML、document.getElementById("id").html()之类的写法都是错误的。 还有一个要注意的是:用#id作为选择符取得的是jQuery对象与document.getElementById("id")得到的DOM对象,这两者并不等价。请参看如下说的两者间的转换。 既 然jQuery有区别但也有联系,那么jQuery对象与DOM对象也可以相互转换。在两者转换前首先我们给一个约定:如果一个获取的是jQuery对 象,那么我们在变量前面加上$,如:var $variab = jQuery对象;如果获取的是DOM对象,则与习惯普通一样:var variab = DOM对象;这么约定只是便于讲解与区别,实际使用中并不规定。
**两种转换方式将一个jQuery对象转换成DOM对象:[index]和.get(index); (1)jQuery对象是一个数据对象,可以通过[index]的方法,来得到相应的DOM对象。 如:var $v =$("#v") ; //jQuery对象 var v=$v[0]; //DOM对象 alert(v.checked) //检测这个checkbox是否被选中 (2)jQuery本身提供,通过.get(index)方法,得到相应的DOM对象 如:var $v=$("#v"); //jQuery对象 var v=$v.get(0); //DOM对象 alert(v.checked) //检测这个checkbox是否被选中
对于已经是一个DOM对象,只需要用$()把DOM对象包装起来,就可以获得一个jQuery对象了。$(DOM对象) 如:var v=document.getElementById("v"); //DOM对象 var $v=$(v); //jQuery对象 转换后,就可以任意使用jQuery的方法了。 通过以上方法,可以任意的相互转换jQuery对象和DOM对象。需要再强调注意的是:DOM对象才能使用DOM中的方法,jQuery对象是不可以用DOM中的方法。
普通的Dom对象一般可以通过$()转换成jQuery对象。
如:$(document.getElementById("msg")) 返回的就是jQuery对象,可以使用jQuery的方法。
由于jQuery对象本身是一个集合。所以如果jQuery对象要转换为Dom对象则必须取出其中的某一项,一般可通过索引取出。 如: $("#msg")[0],$("div").eq(1)[0],$("div").get()[1],$("td")[5]
这些都是Dom对象,可以使用Dom中的方法,但不能再使用jQuery的方法。
以下几种写法都是正确的: $("#msg").html(); $("#msg")[0].innerHTML; $("#msg").eq(0)[0].innerHTML; $("#msg").get(0).innerHTML;
如有
document.getElementById('formid');
$('#formid')
document.getElementsByName('formName')[0]
$("form[name='formName']")
转自:https://www.cnblogs.com/theWayToAce/p/5591221.html
xxxxxxxxxx
.box{
display: flex;
display: inline-flex; /*行内元素*/
display: -webkit-flex; /* Safari Webkit内核的浏览器 */
}
注意,设为Flex布局以后,子元素的float、clear和vertical-align属性将失效。
flex-direction属性决定主轴的方向(即项目的排列方向)。
xxxxxxxxxx
flex-direction: row | row-reverse | column | column-reverse;
默认情况下,项目都排在一条线(又称”轴线”)上。flex-wrap属性定义,如果一条轴线排不下,如何换行。
xxxxxxxxxx
flex-wrap: nowrap | wrap | wrap-reverse;
flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。
xxxxxxxxxx
flex-flow: <flex-direction> <flex-wrap>;
justify-content属性定义了项目在主轴上的对齐方式。
xxxxxxxxxx
justify-content: flex-start | flex-end | center | space-between | space-around;
align-items属性定义项目在交叉轴(副轴/侧轴)上如何对齐。
xxxxxxxxxx
align-items: flex-start | flex-end | center | baseline | stretch;
align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
xxxxxxxxxx
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
xxxxxxxxxx
order: <integer>;
flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
xxxxxxxxxx
flex-grow: <number>; /* default 0 */
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。
flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
xxxxxxxxxx
flex-shrink: <number>; /* default 1 */
如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。负值对该属性无效。
flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
xxxxxxxxxx
flex-basis: <length> | auto; /* default auto */
flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
xxxxxxxxxx
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
xxxxxxxxxx
align-self: auto | flex-start | flex-end | center | baseline | stretch;