JavaScript相关
1、前言
2、JavaScript
2.1、JavaScript概念
2.2、JavaScript组成
2.3、JavaScript的使用
2.4、ECMAScript
2.4.1、基础语法
2.4.2、数据类型
2.4.3、操作符和表达式
2.4.4、if分支语句
2.4.5、switch分支语句
2.4.6、for循环语句
2.4.7、while循环语句
2.4.8、break、continue语句
2.4.9、函数function
2.4.10、数组Array
2.4.11、String类型的常用方法
2.5、DOM
2.5.1、DOM概念
2.5.2、DOM节点
2.5.3、DOM方法
2.5.4、DOM属性
2.6、事件
2.7、BOM
2.7.1、Window对象
2.7.2、Location对象
2.7.3、History对象
2.7.4、Navigator对象
2.7.5、Screen对象
2.8、例子
1、前言
就算是后端开发,有时候也需要写一点JS代码,所以对JavaScript还是有必要了解。前端HTML和CSS挺简单,JavaScript有难度,所以JavaScript玩的溜的人还是很厉害的。作为后端开发人员,我们了解JS中基本的内容就行,有兴趣的话当然可以深入研究去精通。
2、JavaScript
2.1、JavaScript概念
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
在1995年时,由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。
为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。为了统一规格,因为JavaScript兼容于ECMA标准,因此也称为ECMAScript。
小结:JavaScript是一种基于对象和事件驱动的客户端脚本语言,最初的设计是为了检验HTML表单输入的正确性,起源于Netspace公司的LiveScript语言。现发展为一门强大的编程语言。它与Java语言没有任何关系,只是名称上类似。
2.2、JavaScript组成
完整的JavaScript由ECMAScript(核心)、DOM(Document Object Model,文档对象模型)、BOM(Browser Object Model,浏览器对象模型)这三部分组成。
图示如下: 说明如下:
ECMAScript :JavaScript的核心,描述了语言的基本语法和数据类型,ECMAScript是一套标准。
DOM :文档对象模型,是HTML和XML的应用程序接口(API)。DOM将把整个页面规划成由节点层级构成的文档。HTML或XML页面的每个部分都是一个节点的衍生物。
BOM :浏览器对象模型,对浏览器窗口进行访问和操作。BOM作为JavaScript的一部分,并没有相关标准的支持,每一个浏览器都有自己的实现。
2.3、JavaScript的使用
在HTML中通过使用
标签来引入JavaScript脚本。可以放在
里面,也可以放在
里面,一般是放在末尾。如下: 两种方式引入的区别是加载顺序不一样,根据需求选择放在哪里。可以引入外部的js文件,如上面,也可以自己在标签内写js代码。
2.4、ECMAScript
ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)通过ECMA-262标准化的脚本程序设计语言。这种语言在万维网上应用广泛,它往往被称为JavaScript或JScript,所以它可以理解为是javascript的一个标准,但实际上后两者是ECMA-262标准的实现和扩展。
它JavaScript的核心部分,描述了语言的基本语法和数据类型,ECMAScript是一套标准,定义了一种语言(比如JS)是什么样子。
2.4.1、基础语法
(1)注释与分号
注释有单行注释//
和多行注释/**/
,如下:
< script>
< / script>
一般语句结束使用分号,如果省略,则由解析器确定语句结尾。好的习惯是每句JS代码后面都加上分号;
,因为解析器可能会断句错误。
(2)标识符
指变量、函数、属性名字,或者函数的参数。标识符的命名规则如下:
由字母、数字、下划线或美元符号组成。
不能以数字开头。
不能使用关键字、保留字作为标识符。
(3)变量
ECMAScript的变量是松散类型,松散类型的定义是可以用来保存任何类型的数据,也就是说每个变量仅仅是一个用于保存值的占位符而已。变量的声明要使用var操作符,如下:
< script>
var id;
console. log ( id) ;
id = 'id1001' ;
console. log ( id) ;
var name = '云过梦无痕' ;
console. log ( name) ;
var age = 25 , address = '湖北武汉' , sex = '男' ;
console. log ( age + "\n" + address + "\n" + sex) ;
< / script>
注意:ECMAScript中的一切(变量、函数名和操作符)都区分大小写。
2.4.2、数据类型
分为基本数据类型和复杂数据类型。基本数据类型有Undefined、Null、Boolean、Number、String5种。复杂数据类型有Object。如下图: 这里说的主要是5种基本数据类型。
(1)undefined类型
声明了一个变量,但未赋值,那么它就是一个undefined类型的数据。undefined类型只有一个值,即特殊的undefined。如下:
< script>
var age, sex;
console. log ( age) ;
console. log ( sex) ;
< / script>
(2)null类型
null值表示一个空对象指针,如果定义的变量准备在将来用于保存对象,那么最好将变量值初始化为null值。undefined值是派生自null值的,所以undefined==null的返回结果是true。如下:
< script>
var name = null ;
var address = null ;
console. log ( name) ;
console. log ( address) ;
console. log ( name == address) ;
console. log ( undefined == null ) ;
console. log ( null == undefined) ;
< / script>
(3)number类型
number类型用于表示整数和浮点数。NaN即Not a Number的缩写,即非数值,是一个特殊的数值。任何涉及到NaN的操作都会返回NaN。 NaN与任何值都不相等,包括自身。
isNaN(n) :用于检测n是否为非数值,返回结果布尔值,参数可以是任何类型,isNaN()对接收的数值,先尝试转换为数值,再检测是否为非数值。
Number(n) :将n强制转换数值类型。
parseInt(n) :提取数值,且必须是以数字开头。
parseFloat(n) :从第一个字符开始解析每个字符,直至遇到一个无效的浮点数字符为止。
如下:
< script>
var name = 'ycz' , age = 25 , id = '10010' ;
console. log ( isNaN ( name) ) ;
console. log ( isNaN ( age) ) ;
console. log ( isNaN ( id) ) ;
console. log ( isNaN ( height) ) ;
console. log ( typeof ( id) ) ;
id = Number ( id) ;
console. log ( typeof ( id) ) ;
var weight = '67.5kg' , height = '182.54cm' ;
console. log ( parseInt ( weight) ) ;
console. log ( parseInt ( height) ) ;
console. log ( "十六进制0xe表示的十进制数是:" + parseInt ( '0xe' , 16 ) ) ;
console. log ( parseFloat ( weight) ) ;
console. log ( parseFloat ( height) ) ;
var m = '0123' , n = '0.123asbd' ;
console. log ( parseInt ( m) ) ;
console. log ( parseFloat ( m) ) ;
console. log ( parseInt ( n) ) ;
console. log ( parseFloat ( n) ) ;
< / script>
(4)string类型
String类型表示由0或多个16位Unicode字符组成的字符序列,即是字符串。字符串可以由双引号或单引号表示。
str.toString() :将str转换为字符串,返回str的一个副本。
String(str) :将str转换为字符串。
如下:
< script>
var name = 'ycz' , age = 25 , b = true , address = null ;
console. log ( typeof ( age) ) ;
ageStr = age. toString ( ) ;
console. log ( typeof ( ageStr) ) ;
console. log ( typeof ( age) ) ;
b2 = String ( b) ;
console. log ( typeof ( b2) ) ;
addressStr = String ( address) ;
console. log ( typeof ( addressStr) ) ;
console. log ( typeof ( address) ) ;
< / script>
(5)boolean类型
表示真假,false表示假,true表示真。除了0之外的所有数字,都可以转换为布尔值true,除了""之外的所有字符,都可以转为布尔值true,null和undefined转换为布尔值false。
如下:
< script>
var a = true , b = false ;
console. log ( typeof ( a) ) ;
console. log ( typeof ( b) ) ;
console. log ( typeof ( a. toString ( ) ) ) ;
var x = 0 , y= 5 ;
console. log ( Boolean ( x) ) ;
console. log ( Boolean ( y) ) ;
var m = 'ycz' , n = '' , t = null , q;
console. log ( Boolean ( m) ) ;
console. log ( Boolean ( n) ) ;
console. log ( Boolean ( t) ) ;
console. log ( Boolean ( q) ) ;
< / script>
2.4.3、操作符和表达式
将同类型的数据,用运算符号按一定的规则连接起来的、有意义的式子称为表达式。操作符有以下5种。
(1)算数操作符
+、-、*、/、%、递增、递减。如下:
< script>
var a = 20 , b = 5 ;
console. log ( a + b) ;
console. log ( a - b) ;
console. log ( a * b) ;
console. log ( a / b) ;
console. log ( a % b) ;
a++ ;
b-- ;
console. log ( a) ;
console. log ( b) ;
< / script>
(2)逻辑操作符
逻辑操作符有&&、||、!三种,返回布尔值。
&&:如果第一个操作数隐式类型转换后为true,则返回第二个操作数,否则返回第一个操作数。
||:如果第一个操作数隐式类型转换后为true,则返回第一个操作数,否则返回第二个操作数。如果两个操作数都是null、NaN、undefined,则返回null、NaN、undefined。
!:返回相反的布尔值。
如下:
< script>
var a = true , b = false ;
console. log ( a && b) ;
console. log ( a || b) ;
console. log ( ! ( a && b) )
var x = null , y = null ;
console. log ( x && y) ;
console. log ( x || y) ;
console. log ( ! ( x && y) ) ;
< / script>
(3)赋值操作符
=、+=、-=、*=、/=、%=,用于对变量进行赋值。如下:
< script>
var a = 20 , b= 5 ;
a += b;
console. log ( a) ;
a -= b;
console. log ( a) ;
a *= b;
console. log ( a) ;
a /= b;
console. log ( a) ;
a %= b;
console. log ( a) ;
< / script>
(4)比较操作符
> 、< 、>= 、<= 、== (恒等于)、=== (全等于)、!= (不等)、!== (全不等)。
==
只比较值是否相等,===
比较值的同时比较数据类型是否相等,!=
只比较值不等,!==
比较值和类型都不等。比较操作符返回布尔值。如下:
< script>
var a = 20 , b = '20' ;
var c = a == b;
var d = a === b;
console. log ( c) ;
console. log ( d) ;
var e = null , f;
console. log ( e == f) ;
console. log ( e === f) ;
< / script>
(5)三目操作符
条件? 代码1 : 代码2
条件为true,执行代码1,否则执行代码2。
< script>
var score = 76 ;
var res = score < 60 ? '成绩不及格!' : '成绩及格!' ;
console. log ( res) ;
< / script>
2.4.4、if分支语句
语法格式:
语法一:if ( condition) {
代码1 ;
}
语法二:if ( condition) {
代码1 ;
} else {
代码2 ;
}
语法三:if ( condition1) {
代码1 ;
} else if ( condition2) {
代码2 ;
} else {
代码3 ;
}
如下:
< script>
var age = 25 ;
if ( age < 18 ) {
alert ( '小孩子不许上网!' ) ;
} else {
alert ( '欢迎成年人!' ) ;
}
< / script>
< script>
var age = prompt ( '请输入你的年龄:' ) ;
if ( isNaN ( age) || age > 120 ) {
alert ( '请输入有效年龄!' ) ;
} else if ( age < 18 ) {
alert ( '少年时期!' ) ;
} else if ( age <= 30 ) {
alert ( '青年时期!' ) ;
} else if ( age < 60 ) {
alert ( '油腻时期!' ) ;
} else {
alert ( '老年时期!' ) ;
}
< / script>
2.4.5、switch分支语句
语法:
switch ( expression) {
case value:
statement1;
break ;
case value:
statement2;
break ;
case value:
statement3;
break ;
……
default :
statement;
}
如下:
< script>
var weekDay = new Date ( ) . getDay ( ) ;
var res = null ;
switch ( weekDay) {
case 0 :
res = '天' ;
break ;
case 1 :
res = '一' ;
break ;
case 2 :
res = '二' ;
break ;
case 3 :
res = '三' ;
break ;
case 4 :
res = '四' ;
break ;
case 5 :
res = '五' ;
break ;
default :
res = '六' ;
}
alert ( '今天是星期' + res + '!' ) ;
< / script>
2.4.6、for循环语句
语法:
for ( 语句1 ; 语句2 ; 语句3 ) {
循环体代码;
}
< script>
var count = null ;
for ( var i= 1 ; i<= 100 ; i++ ) {
if ( i% 2 == 0 ) {
document. write ( i + "\t" ) ;
count++ ;
}
if ( count % 10 == 0 ) {
document. write ( ' ' ) ;
}
}
document. write ( ' ' + '1到100之间的偶数有:' + count + '个!' ) ;
< / script>
2.4.7、while循环语句
语法:
语法1 :
while ( 条件) {
循环体代码;
}
语法2 :
do {
循环体代码;
} while ( 条件) ;
for循环适合已知次数的循环体,而while循环适合未知次数的循环体。
如下:
< script>
var i = 1 ;
while ( i <= 100 ) {
if ( i % 10 == 0 ) {
document. write ( i + '\t' ) ;
}
i++ ;
}
< / script>
< script>
var i = 1 ;
do {
if ( i % 10 == 0 ) {
document. write ( i + '\t' ) ;
}
i++ ;
} while ( i<= 100 ) ;
< / script>
2.4.8、break、continue语句
break是立即退出循环体,continue是结束本次循环,继续开始下一次循环。break可以用在while循环和for循环中,而continue只能用于for循环中。如下:
< script>
var i = 1 ;
while ( i<= 100 ) {
document. write ( '现在的值:' + i + ' ' ) ;
i++ ;
if ( i > 15 ) {
break ;
}
}
< / script>
< script>
for ( var i= 1 ; i<= 20 ; i++ ) {
if ( i % 2 == 0 ) {
continue ;
}
document. write ( '现在的值:' + i + ' ' ) ;
}
< / script>
2.4.9、函数function
JS中可以定义函数,然后进行调用。
(1)函数的定义
函数使用function定义声明,后跟一组参数以及函数体,语法如下:
function functionName ( [ arg0, arg1……argn] ) {
statements
}
functionName是函数名,属于标识符。arg0,arg1……argn是函数的参数,[]中的内容是可选项,即函数可不带参数。
如下:
< script>
function f1_demo ( name) {
alert ( '我的名字是:' + name + '!' ) ;
}
f1_demo ( '云过梦无痕' ) ;
< / script>
(2)函数的返回值
函数可以有返回值,可以没有返回值。任何函数可以通过return语句来返回一个值。说明如下:
函数会在执行完return语句之后停止并立即退出。
return语句可以不带有任何返回值,用于提前停止函数执行又不需要返回值的情况。
如下:
< script>
function sum_add ( m, n, p) {
var sum = m + n + p;
return sum;
}
var sum = sum_add ( 10 , 25 , 21 ) ;
alert ( '和值是:' + sum) ;
< / script>
function demo ( arg) {
if ( isNaN ( arg) ) {
return ;
} else {
return arg * 2 ;
}
}
var res = demo ( 'ycz' ) ;
alert ( '值为:' + res) ;
< / script>
(3)函数的参数arguments
ECMAScript中的参数在内部用一个数组来表示,在函数体内通过arguments对象来访问这个数组参数。
说明:
arguments对象只是与数组类似,并不是Array的实例。
[]语法访问它的每一个元素,按索引访问,从0开始。
length属性确定传递参数的个数。
如下:
< script>
function fun_demo ( ) {
console. log ( '函数的参数个数为:' + arguments. length) ;
console. log ( '函数的第3个参数为:' + arguments[ 2 ] ) ;
}
fun_demo ( 1 , 2 , 3 , 4 , 5 ) ;
function fun_demo2 ( m, n) {
arguments[ 0 ] = 25 ;
console. log ( '第一个参数为:' + m) ;
}
fun_demo2 ( 25 , 21 ) ;
< / script>
< script>
function avg_count ( ) {
document. write ( '一共有' + arguments. length + '个参数!' ) ;
var sum = 0 ;
for ( var i = 0 ; i < arguments. length - 1 ; i++ ) {
sum += arguments[ i] ;
}
var avg = sum / arguments. length;
return avg;
}
var res = avg_count ( 10 , 20 , 30 ) ;
document. write ( '平均数为:' + res + ' ' ) ;
var res2 = avg_count ( 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 , 100 ) ;
document. write ( '平均数为:' + res2) ;
< / script>
如果不知道函数的参数个数的话,那么使用内置参数arguments是个很好的选择。
2.4.10、数组Array
Array是属于复杂类型Object的。ECMAScript中的数组与其它语言中的数组不太一样,因为可以在同一个数组中存储不同类型的元素项,而Java中的数组存储的必须是同种类型数据的集合。数组的创建如下:
var a = new Array ( length) ;
var a = new Array ( ... ) ;
var a = [ "" , "" , "" , ... ] ;
数组元素的访问使用下标来进行,从索引0开始,注意数组下标的越界问题。使用length属性可以获取数组的元素个数。
如下:
< script>
var arr0 = new Array ( 25 , null , 'yan' , false , 'cheng' ) ;
for ( var i= 0 ; i< arr0. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素:' + arr0[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
var arr2 = new Array ( 3 ) ;
arr2[ 0 ] = 'red' ;
arr2[ 1 ] = 'yellow' ;
arr2[ 2 ] = 'blue' ;
for ( var i= 0 ; i< arr2. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素:' + arr2[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
var arr3 = [ 'yan' , 'cheng' , 'zhi' ] ;
document. write ( '此数组的元素个数为:' + arr3. length + ' ' ) ;
for ( var i= 0 ; i< arr3. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素:' + arr3[ i] + ' ' ) ;
}
< / script>
数组的常用方法如下:
push(a) :将参数a添加到数组的尾部,返回新数组的长度值。
unshift(a) :将参数a添加到数组的头部,返回新数组的长度值。
pop() :删除数组的最后一个元素,返回被删除的那个元素。
shift() :删除数组中的第一个元素,返回被删除的那个元素。
join(separator) :以指定连接符把数组中的所有元素连为一个串,返回字符串值。
reverse() :颠倒数组中元素的顺序,返回一个数组。
sort() :对数组的元素进行排序,返回一个数组。
concat(arr,arr2,…) :用于连接两个或多个数组,返回一个新的数组。
slice(start,end) :从已有的数组中截取片段。start(必需)规定从何处开始选取。如是负数,则用数组长度加上该数,即是其开始位置。end(可选)规定从何处结束选取,是数组末尾的数组下标。
splice(index,count) :删除从索引index开始的多个元素,返回删除的元素组成的数组。
indexOf(searchvalue,startIndex) :从数组的开头(位置0)开始向后查找,返回值为查找项(只限于第一个)在数组中的位置索引,即number类型值,没有找到则返回值-1。
lastIndexOf(searchvalue,endIndex) :从数组末尾开始查找元素,类似indexOf()方法,但第二个参数是结束的索引位。
示例如下:
< script>
var arr = new Array ( 'cheng' ) ;
document. write ( '数组的元素个数为:' + arr. length + ' ' ) ;
document. write ( ' ' ) ;
arr. push ( 'zhi' ) ;
document. write ( '数组的元素个数为:' + arr. length + ' ' ) ;
for ( var i= 0 ; i< arr. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
arr. unshift ( 'yan' ) ;
document. write ( '数组的元素个数为:' + arr. length + ' ' ) ;
for ( var i= 0 ; i< arr. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
arr. pop ( ) ;
document. write ( '数组的元素个数为:' + arr. length + ' ' ) ;
for ( var i= 0 ; i< arr. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
arr. shift ( ) ;
document. write ( '数组的元素个数为:' + arr. length + ' ' ) ;
for ( var i= 0 ; i< arr. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
var arr2 = [ 'yun' , 'guo' , 'meng' , 'wu' , 'heng' ] ;
var res = arr2. join ( "===>" ) ;
document. write ( '连接后的字符串:' + res + ' ' + ' ' ) ;
for ( var i= 0 ; i< arr2. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr2[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
var arr3 = arr2. reverse ( ) ;
for ( var i= 0 ; i< arr3. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr3[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
var arr4 = arr2. sort ( ) ;
for ( var i= 0 ; i< arr4. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr4[ i] + ' ' ) ;
}
var num = [ 1 , 4 , 56 , 32 , 3 , 53 , 12 ] ;
num. sort (
function ( x, y) {
return x - y;
}
) ;
document. write ( ' ' ) ;
for ( var i= 0 ; i< num. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + num[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
num. sort (
function ( x, y) {
return y - x;
}
) ;
document. write ( ' ' ) ;
for ( var i= 0 ; i< num. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + num[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
var arr5 = num. concat ( arr2) ;
for ( var i= 0 ; i< arr5. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr5[ i] + ' ' ) ;
}
var arr6 = arr5. slice ( 0 , num. length) ;
document. write ( ' ' ) ;
for ( var i= 0 ; i< arr6. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个元素为:' + arr6[ i] + ' ' ) ;
}
document. write ( ' ' ) ;
var arr7 = arr6. splice ( 0 , 3 ) ;
for ( var i= 0 ; i< arr7. length; i++ ) {
document. write ( '被删除的第' + ( i+ 1 ) + '个元素为:' + arr7[ i] + ' ' ) ;
}
document. write ( '删除后原数组的长度变为:' + arr6. length) ;
document. write ( ' ' ) ;
var arr8 = [ '云' , '过' , '云' , '之' , '梦' , '彼' , '云' , '痕' ] ;
var result = arr8. indexOf ( '云' , 1 ) ;
document. write ( '云字的索引位:' + result + ' ' ) ;
var result2 = arr8. lastIndexOf ( '云' ) ;
document. write ( '云字的索引位:' + result2) ;
< / script>
2.4.11、String类型的常用方法
string类型在JS中属于基本类型。常用的方法如下:
charAt(index) :返回index索引位置的字符。
charCodeAt(index) :返回index索引位置的字符对应的ASCII编码。
indexOf(str) :从字符串中搜索给定的子字符串,返回子字符串(仅限第一个)的位 置索引。没有找到该子串,则返回-1。
lastIndexOf(str) :与indexOf方法类似,不过是从末尾开始搜索。
slice(start,end) :截取字符串,返回截取的片段。start为必需参数,开始位置,为负数时用字符串长度加上该数,即是开始位置。end为可选参数,表示到哪里结束,end本身不在截取范围之内,省略时截取到末尾。
substring(start,len) :功能同slice()完全一样,区别是当参数为负数时,自动将参数归至0。而且,substring()会将较小的数作为开始位置,将较大的数作为结束位置。
substr(start,len) :从指定索引位置开始截取指定长度字符串。start为必需参数,起始位置,当其为负数时,用字符串长度加上该数,即为起始位置。len为可选参数。
split(separator) :使用指定分隔符把字符串分割成字符串数组,返回数组。
replace(regex/substr,replacement) :用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串,返回一个替换后的string字符串。regex为必需参数,规定子字符串或要替换的模式的RegExp对象。replacement为必需参数,一个字符串值。
toUpperCase() :字符串转换成大写。
toLowerCase() :字符串转换成小写。
< script>
var name = 'yanchengzhi' ;
var char = name. charAt ( 6 ) ;
document. write ( '索引位置6的字符是:' + char + ' ' ) ;
var asc = name. charCodeAt ( 6 ) ;
document. write ( '索引位置6的字符的ACSII码值是:' + asc + ' ' ) ;
var email = '[email protected] ' ;
var index = email. indexOf ( '@qq' ) ;
document. write ( '@qq第一次出现的位置是::' + index + ' ' ) ;
var last_index = email. lastIndexOf ( '1' ) ;
document. write ( '1最后一次出现的位置是::' + last_index + ' ' ) ;
document. write ( '截取后的子串是:' + email. slice ( 10 ) + ' ' ) ;
document. write ( '截取后的子串是:' + email. slice ( 10 , 13 ) + ' ' ) ;
document. write ( '截取后的子串是:' + email. slice ( - 7 , 13 ) + ' ' ) ;
document. write ( '截取后的子串是:' + email. substring ( 10 ) + ' ' ) ;
document. write ( '截取后的子串是:' + email. substring ( 10 , 13 ) + ' ' ) ;
document. write ( '截取后的子串是:' + email. substring ( - 10 , 13 ) + ' ' ) ;
document. write ( '截取后的子串是:' + email. substr ( 10 ) + ' ' ) ;
document. write ( '截取后的子串是:' + email. substr ( 10 , 7 ) + ' ' ) ;
document. write ( '截取后的子串是:' + email. substr ( - 7 , 7 ) + ' ' ) ;
var url = 'www.ycz.abcd.com' ;
var arr = url. split ( '.' ) ;
for ( var i= 0 ; i< arr. length; i++ ) {
document. write ( '第' + ( i+ 1 ) + '个字符串是:' + arr[ i] + ' ' ) ;
}
function getsuffix ( fileName) {
var index = fileName. indexOf ( '.' ) ;
var suffix = fileName. substring ( index+ 1 ) ;
return suffix;
}
document. write ( '该文件的后缀名是:' + getsuffix ( '灵剑尊.txt' ) + ' ' ) ;
document. write ( '该文件的后缀名是:' + getsuffix ( '乐逍遥.mp3' ) + ' ' ) ;
document. write ( '该文件的后缀名是:' + getsuffix ( '山海经随手笔记.docx' ) + ' ' ) ;
var url2 = url. replace ( '.' , '点' ) ;
document. write ( '替换后的子串是:' + url2 + ' ' ) ;
var str = 'I am a Single Dog' ;
document. write ( '转换为大写是:' + str. toUpperCase ( ) + ' ' ) ;
document. write ( '转换为小写是:' + str. toLowerCase ( ) + ' ' ) ;
function toTuoFeng ( str) {
var arr = str. split ( '_' ) ;
var result = arr[ 0 ] ;
for ( var i= 1 ; i< arr. length; i++ ) {
result += arr[ i] . charAt ( 0 ) . toUpperCase ( ) + arr[ i] . substr ( 1 ) ;
}
return result;
}
document. write ( '转换为驼峰是:' + toTuoFeng ( 'yan_cheng_zhi_de_yun' ) + ' ' ) ;
< / script>
2.5、DOM
2.5.1、DOM概念
文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM。Document Object Model的历史可以追溯至1990年代后期微软与Netscape的"浏览器大战",双方为了在JavaScript与JScript一决生死,于是大规模的赋予浏览器强大的功能。微软在网页技术上加入了不少专属事物,既有VBScript、ActiveX、以及微软自家的DHTML格式等,使不少网页使用非微软平台及浏览器无法正常显示。DOM即是当时蕴酿出来的杰作。
DOM(文档对象模型)是HTML和XML的应用程序接口(API)。DOM将把整个页面规划成由节点层级构成的文档。HTML或XML页面的每个部分都是一个节点的衍生物。DOM通过创建树来表示文档,从而使开发者对文档的内容和结构具有空前的控制力。用DOM API可以轻松地删除、添加和替换节点。我们了解HTML DOM就可以了,HTML DOM定义了所有HTML元素的对象和属性,以及访问它们的方法。换言之,HTML DOM是关于如何获取、修改、添加或删除HTML元素的标准。
2.5.2、DOM节点
在HTML DOM中,所有事物都是节点。DOM是被视为节点树的HTML。如下:
整个文档是一个文档节点。
每个HTML元素是元素节点。
HTML元素内的文本是文本节点。
每个HTML属性是属性节点。
注释是注释节点。
节点树
HTML DOM将HTML文档视作树结构,这种结构被称为节点树DOM Tree,如下: 通过HTML DOM,树中的所有节点均可通过JavaScript进行访问。所有HTML元素(节点)均可被修改,也可以创建或删除节点。
节点父、子和同胞
节点树中的节点彼此拥有层级关系。父(parent)、子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。说明如下:
在节点树中,顶端节点被称为根(root)。
每个节点都有父节点、除了根(它没有父节点)。
一个节点可拥有任意数量的子节点。
同胞是拥有相同父节点的节点。
示例如下: 说明如下:
节点没有父节点,它是根节点。
节点和
节点是
节点的子节点。
节点和
节点是同胞节点。
节点和
节点是
节点的子节点。
节点的子节点是测试这个文本节点。
节点和
节点是同胞节点。
节点、
节点、
节点是
节点的子节点。
节点、
节点、
节点是同胞节点。
节点的子节点是元素1这个文本节点。
节点是
节点的子节点,也是
节点的子节点。
节点的子节点有
节点、
节点和文本节点。
节点和
节点的子节点只有文本节点。
以上就是HTML文档中所有节点之间的关系。
2.5.3、DOM方法
方法是我们可以在节点(HTML元素)上执行的动作。所有HTML元素被定义为对象,而编程接口则是对象方法和对象属性,方法是能够执行的动作,比如添加或修改元素。常用的方法如下: 示例:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> 测试 title>
head>
< body>
< div class = " box" id = " box" > 元素1 div>
< ul id = " list" >
< li> < i> 前端界面开发 i> li>
< li class = " on" > < b> 服务器开发 b> li>
< li> < i> UI设计 i> li>
ul>
< ol>
< li> JavaScript原生 li>
< li> JavaScript框架 li>
ol>
坚持总有收获。 p>
保持进步,保持虚心。 p>
< h3> 灵剑尊
h3>
div>
< script src = " ./js/demo.js" type = " text/javascript" > script>
body>
html>
var box = document. getElementById ( 'box' ) ;
box. style. fontSize = '30px' ;
box. style. fontWeight = 'bold' ;
box. style. color = 'red' ;
box. style. fontStyle = 'italic' ;
var lis = document. getElementsByTagName ( 'li' ) ;
for ( var i= 0 ; i< lis. length; i++ ) {
lis[ i] . style. color = 'blue' ;
if ( i== 0 || i== 1 ) {
lis[ i] . style. background = '#ccc' ;
} else if ( i== 2 || i== 3 ) {
lis[ i] . style. background = '#2f2e2a' ;
} else {
lis[ i] . style. background = 'pink' ;
}
}
var classes = document. getElementsByClassName ( 'one' ) ;
for ( var i= 0 ; i< classes. length; i++ ) {
var txt = classes[ i] . innerHTML;
console. log ( '文本内容是:' + txt) ;
}
var txt = document. createTextNode ( '总会有一天释怀过去。' ) ;
var h2 = document. createElement ( 'h2' ) ;
h2. appendChild ( txt) ;
document. body. appendChild ( h2) ;
var ones = document. getElementsByClassName ( 'one' ) ;
var addTxt1 = document. createTextNode ( '云过梦无痕' ) ;
var addTxt2 = document. createTextNode ( '爱江山更爱美人' ) ;
for ( var i= 0 ; i< ones. length; i++ ) {
ones[ 0 ] . appendChild ( addTxt1) ;
ones[ 1 ] . appendChild ( addTxt2) ;
}
var d = document. getElementById ( 'd1' ) ;
var h3 = document. getElementById ( 'd1' ) . getElementsByTagName ( 'h3' ) [ 0 ] ;
d. removeChild ( h3) ;
var t = document. createTextNode ( '替换的内容' ) ;
var p = document. createElement ( 'p' ) ;
p. appendChild ( t) ;
var rh = document. getElementsByTagName ( 'h2' ) [ 0 ] ;
rh. parentNode. replaceChild ( p, rh) ;
var t2 = document. createTextNode ( 'hello world!' ) ;
var p2 = document. createElement ( 'p' ) ;
p2. appendChild ( t2) ;
var s = document. getElementById ( 'box' ) ;
document. body. insertBefore ( p2, s) ;
var pd = document. getElementById ( 'd1' ) ;
pd. setAttribute ( 'name' , 'ycz' ) ;
var name = pd. getAttribute ( 'name' ) ;
var iName = pd. getAttribute ( 'id' ) ;
console. log ( 'name属性值:' + name) ;
console. log ( 'id属性值:' + iName) ;
pd. removeAttribute ( 'name' ) ;
console. log ( 'name属性值:' + pd. getAttribute ( 'name' ) ) ;
2.5.4、DOM属性
属性是节点(HTML元素)的值,能够获取或设置。常用的属性如下:
innerHTML :获取、设置、替换元素的内容。这个属性非常有用。
nodeName :规定节点的名称。nodeName是只读的,元素节点的nodeName与标签名相同,属性节点的nodeName与属性名相同,文本节点的nodeName始终是#text,文档节点的nodeName始终是 #document。
nodeValue :规定节点的值。元素节点的nodeValue是undefined或null,文本节点的 nodeValue是文本本身,属性节点的nodeValue是属性值。
nodeType :返回节点的类型。nodeType是只读的,如下说明:
parentNode :获取节点(元素)的父节点。
childNodes :获取节点(元素)的所有子节点,返回数组。
attributes :获取节点(元素)的所有属性节点,返回数组。
示例如下:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> 测试 title>
head>
< body>
< h2> 我喜欢你。
h2>
div>
< p> 仅此而已
p>
< script src = " ./js/demo.js" type = " text/javascript" > script>
body>
html>
var div = document. getElementById ( 'love' ) ;
var content = div. innerHTML;
console. log ( content) ;
var p = document. getElementsByTagName ( 'p' ) [ 0 ] ;
var c2 = p. innerHTML;
console. log ( c2) ;
div. innerHTML = '我想告诉你。 ' ;
p. innerHTML = '如果你相信的话。' ;
var divName = div. nodeName;
var divValue = div. nodeValue;
var divType = div. nodeType;
console. log ( divName + '======>' + divValue + '======>' + divType) ;
var txts = p. childNodes;
console. log ( txts[ 0 ] . nodeName + '======>' + txts[ 0 ] . nodeValue + '======>' + txts[ 0 ] . nodeType) ;
var a = div. attributes;
console. log ( a[ 0 ] . nodeName + '======>' + a[ 0 ] . nodeValue + '======>' + a[ 0 ] . nodeType) ;
var parent = div. parentNode;
console. log ( parent. nodeName + '======>' + parent. nodeValue + '======>' + parent. nodeType) ;
DOM有非常多的方法和属性,这里只是简单的说一下比较常用的几种,可以翻阅相关API文档。
2.6、事件
事件是发生在HTML元素上的“事情”。当在HTML页面中使用JavaScript时,JavaScript 能够“应对”这些事件。即事件可以是浏览器或用户做的某些事情,是文档或浏览器窗口中发生的一些特定的交互瞬间。直接在HTML元素标签内添加事件,执行脚本。
常见的事件如下:
onload :页面加载时触发。
onclick :鼠标点击时触发。
onmouseover :鼠标划过时触发。
onmouseout :鼠标离开时触发。
onmousedown :鼠标按钮在元素上按下时触发。
onmousemove :在鼠标指针移动时触发。
onmouseup :在元素上松开鼠标按钮时触发。
onfocus :获得焦点时触发。
onblur :失去焦点时触发。
onchange :域的内容改变时发生。
onsubmit :表单中的确认按钮被点击时发生。
onresize :当调整浏览器窗口的大小时触发。
onscroll :拖动滚动条滚动时触发。
onkeydown :在用户按下一个键盘按键时触发。
onkeypress :在键盘按键被按下并释放一个键时发生。
onkeyup :在键盘按键被松开时触发。
keyCode :返回onkeypress、onkeydown或onkeyup事件触发的键的值的字符代码,或键的代码。
示例如下:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> 测试 title>
< link rel = " stylesheet" href = " ./css/demo.css" />
head>
< body onload = " addContent()" >
p>
点击我! button>
< br>
锁定 button>
< br> < br> < br>
春情缱绻
div>
乐逍遥 h1>
< br> < br>
< div>
< p class = " text" > 您还可以输入< span> < em id = " count" > 30 em> / 30 span> : p>
< div class = " intro" >
< textarea id = " text" cols = " 30" rows = " 5" maxlength = " 30" placeholder = " 请输入内容" > textarea>
div>
div>
< br> < br>
< div class = " box2" id = " box2" >
请选择你喜欢的颜色:
< select name = " color" id = " menu" >
< option value = " " > 请选择 option>
< option value = " red" > 红色 option>
< option value = " green" > 绿色 option>
< option value = " yellow" > 黄色 option>
< option value = " orange" > 橘色 option>
< option value = " pink" > 粉色 option>
select>
div>
< script src = " ./js/demo.js" type = " text/javascript" > script>
body>
html>
.lock {
color : #fff;
font-size : 20px;
text-align : center;
width : 240px;
height : 50px;
line-height : 30px;
background : blue;
border-radius : 8px;
cursor : pointer;
margin-top : 30px;
}
.unlock {
color : #fff;
font-size : 20px;
text-align : center;
width : 240px;
height : 50px;
line-height : 30px;
background : orange;
border-radius : 8px;
cursor : pointer;
margin-top : 30px;
}
.text span {
font-weight : bold;
color : #f00;
}
.box2 {
width : 300px;
height : 300px;
border : 1px solid pink;
overflow : auto;
}
function addContent ( ) {
var p = document. getElementById ( 'one' ) ;
p. innerHTML = '加载完毕后添加内容!' ;
}
var btn2 = document. getElementById ( 'btn2' ) ;
btn2. onclick = function ( ) {
if ( this . className == 'lock' ) {
this . className = 'unlock' ;
this . innerHTML = '解锁' ;
} else if ( this . className == 'unlock' ) {
this . className = 'lock' ;
this . innerHTML = '锁定' ;
}
}
function addGreen ( ) {
var ele = document. getElementById ( 'd1' ) ;
ele. style. background = 'green' ;
}
function changeColor ( ) {
var ele = document. getElementById ( 'd1' ) ;
ele. style. background = 'pink' ;
}
var ele = document. getElementById ( 'd2' ) ;
function mouseDown ( ) {
ele. innerHTML = '鼠标已按下!' ;
}
function mouseUp ( ) {
ele. innerHTML = '鼠标松开了!' ;
}
function mouseMove ( ) {
console. log ( '鼠标在移动!' ) ;
}
var input = document. getElementById ( 'name' ) ;
input. onfocus = function ( ) {
this . style. background = 'pink' ;
}
input. onblur = function ( ) {
this . style. background = 'gray' ;
}
var text = document. getElementById ( 'text' ) ;
var count = document. getElementById ( 'count' ) ;
text. onkeyup = function ( ) {
var wordLenth = text. value. length;
count. innerHTML = 30 - wordLenth;
}
var box2 = document. getElementById ( 'box2' ) ;
var menu = document. getElementById ( 'menu' ) ;
menu. onchange = function ( ) {
var value = this . value;
if ( value == '' ) {
box2. style. background = 'white' ;
} else {
box2. style. background = value;
}
}
点击按钮: 点击蓝色的锁定按钮: 再点击: 鼠标移动到段落上: 离开: 点击这个标题,鼠标左键不放: 松开左键: 点击进这个文本框聚焦: 离开文本框,点击别处: 在多行文本域中输入内容: 下拉框选择一个: 在开发中JS事件用的非常频繁,熟悉每个事件,对于我们后端开发来说很有好处。
2.7、BOM
浏览器对象模型(Browser Object Model,简称BOM)是浏览器的内置对象管理模型。在前端页面开发时,可以通过对浏览器的内置对象进行控制,提高Html页面的动态效果,增强用户对页面文件的体验。
BOM对浏览器窗口进行访问和操作。例如弹出新的浏览器窗口,移动、改变和关闭浏览器窗口,提供详细的网络浏览器信息(navigator object),详细的页面信息(location object),详细的用户屏幕分辨率的信息(screen object),对cookies的支持等等。BOM作为JavaScript的一部分并没有相关标准的支持,每一个浏览器都有自己的实现,虽然有一些非事实的标准,但还是给开发者带来一定的麻烦。
BOM对象
BOM提供多个对象,包括:Window、Navigator、Screen、History、Location等。其中Window对象为顶层对象,其他对象都为Window对象的子对象。
如下图示:
2.7.1、Window对象
Window是浏览器的一个实例,在浏览器中,Window对象有双重角色,它既是通过JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的Global全局对象。它表示浏览器打开的窗口、标签或者框架(若当前页面里包含多个iframe,会为每个iframe创建Window对象)。Window对象不会被实例化。
调用属性和方法都作为window的静态成员。调用Window对象的成员时,可以省略前面的window。如:window.alert() 可写成 alert() 。
注意:所有的全局变量和全局方法都被归在window上。
常用方法如下:
alert(message) :浏览器显示带有一段消息和一个确认按钮的警告框。
confirm(message) :显示一个带有指定消息和OK及取消按钮的对话框。如果用户点击确定按钮,则confirm返回true,如果点击取消按钮,则返回false。
prompt(text,defaultText) :text是要在对话框中显示的纯文本,defaultText是默认的输入文本,这个是可选参数。如果用户单击提示框的取消按钮,则返回null,如果单击确定按钮,则返回用户输入字段当前显示的文本。
open(pageURL,name,parameters) :打开一个新的浏览器窗口或查找一个已经命名的窗口。pageURL是窗口路径,name是窗口句柄(name声明了新窗口的名称,方便后期通过name对子窗口进行引用),parameters是窗口参数(各参数用逗号分隔)。
close() :将关闭window指定的顶层浏览器窗口。某个窗口可以通过调用self.close() 或只调用close()来关闭其自身。只有通过JavaScript代码打开的窗口才能够由JavaScript代码关闭。这阻止了恶意的脚本终止用户的浏览器。
setTimeout(code,millisec) :用于在指定的毫秒数后调用函数或计算表达式,会返回一个ID值。code是要调用的函数或要执行的JavaScript代码,millisec是在执行代码前需要等待的毫秒数。setTimeout()只执行code一次,如果要多次调用,可以使用setInterval()或者让code自身再次调用setTimeout()。
clearTimeout(id_of_settimeout) :取消由setTimeout()方法设置的timeout,参数是setTimeout方法返回的ID值,参数必须。
setInterval(code,millisec) :按照指定的周期(以毫秒计)来调用函数或计算表达式。会返回一个ID值。setInterval()方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。
clearInterval(id_of_setinterval) :可取消由setInterval()设置的timeout。参数必须是由setInterval()返回的ID值。
示例如下:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> 测试 title>
head>
弹出警告框 button>
< br> < br>
弹出对话框 button>
< br> < br>
输入我的姓名 button>
< br> < br>
打开百度首页 button>
< br> < br>
关闭本窗口 button>
< br> < br>
点击后十秒钟弹出窗口 button>
< br> < br>
开始计数 button>
停止计数 button>
重置为0 button>
< br> < br>
span>
停止计时 button>
开始计时 button>
< br> < br>
span>
停止计时 button>
开始计时 button>
< script>
var btn1 = document. getElementById ( 'btn1' ) ;
btn1. onclick = function ( ) {
alert ( '欢迎来到本站点!' ) ;
}
var btn2 = document. getElementById ( 'btn2' ) ;
btn2. onclick = function ( ) {
var flag = confirm ( '是否确认当前为本人操作?' ) ;
if ( flag) {
alert ( '你已经确定!' ) ;
} else {
alert ( '您取消了当前操作!' ) ;
}
}
var btn3 = document. getElementById ( 'btn3' ) ;
btn3. onclick = function ( ) {
var name = prompt ( '请输入您的姓名:' , '未知' ) ;
console. log ( '您的姓名是:' + name) ;
}
var btn4 = document. getElementById ( 'btn4' ) ;
btn4. onclick = function ( ) {
window. open ( 'https://www.baidu.com' ) ;
}
var btn5 = document. getElementById ( 'btn5' ) ;
btn5. onclick = function ( ) {
window. close ( ) ;
}
var btn6 = document. getElementById ( 'btn6' ) ;
btn6. onclick = function ( ) {
setTimeout ( 'alert("你好鸭,2021!")' , 10000 ) ;
}
var id;
var a = 0 ;
var input = document. getElementById ( 'count' ) ;
function startCount ( ) {
input. value = a;
a++ ;
id = setTimeout ( 'startCount()' , 1000 ) ;
}
function stopCount ( ) {
clearTimeout ( id) ;
}
function resetZero ( ) {
a = 0 ;
input. value = a;
}
var t;
function showTime ( ) {
var time = document. getElementById ( 'showTime' ) ;
time. innerHTML = getCurrentTime ( ) ;
t = setTimeout ( 'showTime()' , 1000 ) ;
}
function getCurrentTime ( ) {
var today = new Date ( ) ;
var year = today. getFullYear ( ) ;
var month = checkTime ( today. getMonth ( ) + 1 ) ;
var day = checkTime ( today. getDate ( ) ) ;
var hour = checkTime ( today. getHours ( ) ) ;
var minute = checkTime ( today. getMinutes ( ) ) ;
var second = checkTime ( today. getSeconds ( ) ) ;
var timeNow = year + '年' + month + '月' + day + '日' + ' ' + hour + '时' + minute + '分' + second + '秒' ;
return timeNow;
}
function checkTime ( a) {
if ( a< 10 ) {
return '0' + a;
} else {
return a;
}
}
var s1 = document. getElementById ( 's1' ) ;
s1. onclick = function ( ) {
clearTimeout ( t) ;
}
var s2 = document. getElementById ( 's2' ) ;
s2. onclick = function ( ) {
showTime ( ) ;
}
function showTime2 ( ) {
var time = document. getElementById ( 'showTime2' ) ;
time. innerHTML = getCurrentTime ( ) ;
}
var t2 = setInterval ( 'showTime2()' , 1000 ) ;
var s3 = document. getElementById ( 's3' ) ;
s3. onclick = function ( ) {
clearInterval ( t2) ;
}
var s4 = document. getElementById ( 's4' ) ;
s4. onclick = function ( ) {
t2 = setInterval ( 'showTime2()' , 1000 ) ;
}
script>
body>
html>
点击: 点击: 点击确定: 点击取消: 点击: 点击确定: 输入自定义值确定:
点击: 成功跳转。
点击: 成功关闭窗口。
点击: 十秒钟后出现弹窗: 点击开始计数: 一直在变,点击停止计数: 停止了,点击重置为0: 重置成功。
这两个时间是一直在变的,点击停止计时按钮,计时会停止,点击开始计时,又会每秒钟变化一次。
2.7.2、Location对象
Location对象提供了与当前窗口中加载的文档有关的信息,还提供了一些导航的功能,它既是window对象的属性,也是document对象的属性。可对当前页面的URL进行操作,如:导航到新的页面、获取URL信息等。window.location或者location来进行调用。
常用方法如下:
assign(url) :加载新的文档。
reload() :重新加载当前文档,传参true从服务器开始加载,相当于刷新。
replace(url) :用新的文档替换当前文档。
常用的属性如下:
hash :设置或返回从井号 (#) 开始的URL(锚)。
host :设置或返回主机名和当前URL的端口号。
hostname :设置或返回当前URL的主机名。
href :设置或返回完整的URL。
pathname :设置或返回当前URL的路径部分。
port :设置或返回当前URL的端口号。
protocol :设置或返回当前URL的协议。
search :设置或返回从问号 (?) 开始的 URL(查询部分)。
示例如下:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> 测试 title>
head>
< body>
加载新文档 button> < br> < br>
重新加载此文档 button> < br> < br>
替换此文档 button> < br> < br>
< script>
var url = 'https://www.baidu.com' ;
var btn = document. getElementById ( 'loadDoc' ) ;
btn. onclick = function ( ) {
window. location. assign ( url) ;
}
var btn2 = document. getElementById ( 'reloadDoc' ) ;
btn2. onclick = function ( ) {
window. location. reload ( ) ;
}
var btn3 = document. getElementById ( 'replaceDoc' ) ;
btn3. onclick = function ( ) {
window. location. replace ( url) ;
}
window. location. hash = '#yzc111111' ;
console. log ( window. location. hash) ;
console. log ( window. location. href) ;
console. log ( window. location. host) ;
console. log ( window. location. hostname) ;
console. log ( window. location. pathname) ;
console. log ( window. location. protocol) ;
console. log ( window. location. prot) ;
console. log ( window. location. search) ;
script>
body>
html>
点击第一个按钮: 点击第二个按钮: 当前页面重新刷新。
点击第三个按钮: 当前文档替换成了百度首页内容,且不允许后退。
浏览器console控制台:
2.7.3、History对象
History对象保存了用户在浏览器中访问页面的历史记录。可对当前页的浏览历史进行操作,如:前进、后退等。出于安全考虑,不能知道浏览了哪些URL。
常用方法及属性如下:
back():加载history列表中的前一个URL。
forward():加载history列表中的下一个URL。
go():加载history列表中的某个具体页面。
length:返回浏览器历史列表中的URL数量。
History对象权当了解就可以了,用的不多。
2.7.4、Navigator对象
Navigator对象包含浏览器信息。如:获取浏览器名称、版本信息、操作系统平台信息等。调用方式window.navigator或者navigator。
常用属性如下: 常用方法: 示例如下:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> 测试 title>
head>
< body>
< script>
console. log ( '浏览器代码名:' + window. navigator. appCodeName) ;
console. log ( '浏览器的次级版本:' + window. navigator. appMinorVersion) ;
console. log ( '浏览器名称:' + window. navigator. appName) ;
console. log ( '浏览器的平台和版本信息:' + window. navigator. appVersion) ;
console. log ( '当前浏览器的语言' + window. navigator. browserLanguage) ;
console. log ( '浏览器是否开启Cookie?' + window. navigator. cookieEnabled) ;
console. log ( '浏览器的cpu等级' + window. navigator. cpuClass) ;
console. log ( '当前系统是否处于脱机状态?' + window. navigator. onLine) ;
console. log ( '运行浏览器的操作系统平台:' + window. navigator. platform) ;
console. log ( 'OS使用的默认语言:' + window. navigator. systemLanguage) ;
console. log ( 'user-agent头部的值:' + window. navigator. userAgent) ;
console. log ( '浏览器是否启用了Java?' + window. navigator. javaEnabled ( ) ) ;
function getBrowserType ( ) {
var browser;
var userAgent = window. navigator. userAgent. toLowerCase ( ) ;
if ( userAgent. indexOf ( 'msie' ) > - 1 ) {
browser = 'IE浏览器' ;
} else if ( userAgent. indexOf ( 'chrome' ) > - 1 ) {
browser = '谷歌浏览器或含有谷歌内核' ;
} else if ( userAgent. indexOf ( 'opera' ) > - 1 ) {
browser = 'opera浏览器' ;
} else {
browser = '未知浏览器' ;
}
return browser;
}
console. log ( '当前浏览器:' + getBrowserType ( ) ) ;
script>
body>
html>
2.7.5、Screen对象
Screen对象包含有关客户端显示屏幕的信息。如获取屏幕高度、宽度等。调用方式window.screen或者screen。
常用属性如下: 示例如下:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> 测试 title>
head>
< body>
< script>
console. log ( '显示屏幕宽度:' + window. screen. availWidth) ;
console. log ( '显示屏幕高度:' + window. screen. availHeight) ;
console. log ( '调色板的比特深度:' + window. screen. bufferDepth) ;
console. log ( '调色板的比特深度:' + window. screen. colorDepth) ;
console. log ( '显示屏幕的每英寸水平点数:' + window. screen. deviceXDPI) ;
console. log ( '显示屏幕的每英寸垂直点数:' + window. screen. deviceYDPI) ;
console. log ( '用户是否在显示控制面板中启用了字体平滑:' + window. screen. fontSmoothingEnabled) ;
console. log ( '显示屏幕的宽度:' + window. screen. width) ;
console. log ( '显示屏幕的高度:' + window. screen. height) ;
console. log ( '显示屏幕每英寸的水平方向的常规点数:' + window. screen. logicalXDPI) ;
console. log ( '显示屏幕每英寸的垂直方向的常规点数:' + window. screen. logicalYDPI) ;
console. log ( '显示屏幕的颜色分辨率(比特每像素):' + window. screen. pixelDepth) ;
console. log ( '屏幕的刷新率:' + window. screen. updateInterval) ;
script>
body>
html>
可以看到,大部分属性都不支持。
2.8、例子
模拟导航图自动切换场景,如下:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> 测试 title>
< link rel = " stylesheet" href = " ./css/demo.css" />
head>
< body>
你可能感兴趣的:(前端)
Long类型前后端数据不一致
igotyback
前端
响应给前端的数据浏览器控制台中response中看到的Long类型的数据是正常的到前端数据不一致前后端数据类型不匹配是一个常见问题,尤其是当后端使用Java的Long类型(64位)与前端JavaScript的Number类型(最大安全整数为2^53-1,即16位)进行数据交互时,很容易出现精度丢失的问题。这是因为JavaScript中的Number类型无法安全地表示超过16位的整数。为了解决这个问
DIV+CSS+JavaScript技术制作网页(旅游主题网页设计与制作)云南大理
STU学生网页设计
网页设计 期末网页作业 html静态网页 html5期末大作业 网页设计 web大作业
️精彩专栏推荐作者主页:【进入主页—获取更多源码】web前端期末大作业:【HTML5网页期末作业(1000套)】程序员有趣的告白方式:【HTML七夕情人节表白网页制作(110套)】文章目录二、网站介绍三、网站效果▶️1.视频演示2.图片演示四、网站代码HTML结构代码CSS样式代码五、更多源码二、网站介绍网站布局方面:计划采用目前主流的、能兼容各大主流浏览器、显示效果稳定的浮动网页布局结构。网站程
【加密社】Solidity 中的事件机制及其应用
加密社
闲侃 区块链 智能合约 区块链
加密社引言在Solidity合约开发过程中,事件(Events)是一种非常重要的机制。它们不仅能够让开发者记录智能合约的重要状态变更,还能够让外部系统(如前端应用)监听这些状态的变化。本文将详细介绍Solidity中的事件机制以及如何利用不同的手段来触发、监听和获取这些事件。事件存储的地方当我们在Solidity合约中使用emit关键字触发事件时,该事件会被记录在区块链的交易收据中。具体而言,事件
关于城市旅游的HTML网页设计——(旅游风景云南 5页)HTML+CSS+JavaScript
二挡起步
web前端期末大作业 javascript html css 旅游 风景
⛵源码获取文末联系✈Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业|游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作|HTML期末大学生网页设计作业,Web大学生网页HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScrip
HTML网页设计制作大作业(div+css) 云南我的家乡旅游景点 带文字滚动
二挡起步
web前端期末大作业 web设计网页规划与设计 html css javascript dreamweaver 前端
Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作HTML期末大学生网页设计作业HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScript:做与用户的交互行为文章目录前端学习路线
springboot+vue项目实战一-创建SpringBoot简单项目
苹果酱0567
面试题汇总与解析 spring boot 后端 java 中间件 开发语言
这段时间抽空给女朋友搭建一个个人博客,想着记录一下建站的过程,就当做笔记吧。虽然复制zjblog只要一个小时就可以搞定一个网站,或者用cms系统,三四个小时就可以做出一个前后台都有的网站,而且想做成啥样也都行。但是就是要从新做,自己做的意义不一样,更何况,俺就是专门干这个的,嘿嘿嘿要做一个网站,而且从零开始,首先呢就是技术选型了,经过一番思量决定选择-SpringBoot做后端,前端使用Vue做一
博客网站制作教程
2401_85194651
java maven
首先就是技术框架:后端:Java+SpringBoot数据库:MySQL前端:Vue.js数据库连接:JPA(JavaPersistenceAPI)1.项目结构blog-app/├──backend/│├──src/main/java/com/example/blogapp/││├──BlogApplication.java││├──config/│││└──DatabaseConfig.java
最简单将静态网页挂载到服务器上(不用nginx)
全能全知者
服务器 nginx 运维 前端 html 笔记
最简单将静态网页挂载到服务器上(不用nginx)如果随便弄个静态网页挂在服务器都要用nignx就太麻烦了,所以直接使用Apache来搭建一些简单前端静态网页会相对方便很多检查Web服务器服务状态:sudosystemctlstatushttpd#ApacheWeb服务器如果发现没有安装web服务器:安装Apache:sudoyuminstallhttpd启动Apache:sudosystemctl
补充元象二面
Redstone Monstrosity
前端 面试
1.请尽可能详细地说明,防抖和节流的区别,应用场景?你的回答中不要写出示例代码。防抖(Debounce)和节流(Throttle)是两种常用的前端性能优化技术,它们的主要区别在于如何处理高频事件的触发。以下是防抖和节流的区别和应用场景的详细说明:防抖和节流的定义防抖:在一段时间内,多次执行变为只执行最后一次。防抖的原理是,当事件被触发后,设置一个延迟定时器。如果在这个延迟时间内事件再次被触发,则重
微信小程序开发注意事项
jun778895
微信小程序 小程序
微信小程序开发是一个融合了前端开发、用户体验设计、后端服务(可选)以及微信小程序平台特性的综合性项目。这里,我将详细介绍一个典型的小程序开发项目的全过程,包括项目规划、设计、开发、测试及部署上线等各个环节,并尽量使内容达到或超过2000字的要求。一、项目规划1.1项目背景与目标假设我们要开发一个名为“智慧校园助手”的微信小程序,旨在为学生提供一站式校园生活服务,包括课程表查询、图书馆座位预约、食堂
字节二面
Redstone Monstrosity
前端 面试
1.假设你是正在面试前端开发工程师的候选人,面试官让你详细说出你上一段实习过程的收获和感悟。在上一段实习过程中,我获得了宝贵的实践经验和深刻的行业洞察,以下是我的主要收获和感悟:一、专业技能提升框架应用熟练度:通过实际项目,我深入掌握了React、Vue等前端框架的使用,不仅提升了编码效率,还学会了如何根据项目需求选择合适的框架。问题解决能力:在实习期间,我遇到了许多预料之外的技术难题。通过查阅文
前端代码上传文件
余生逆风飞翔
前端 javascript 开发语言
点击上传文件import{ElNotification}from'element-plus'import{API_CONFIG}from'../config/index.js'import{UploadFilled}from'@element-plus/icons-vue'import{reactive}from'vue'import{BASE_URL}from'../config/index'i
uniapp实现动态标记效果详细步骤【前端开发】
2401_85123349
uni-app
第二个点在于实现将已经被用户标记的内容在下一次获取后刷新它的状态为已标记。这是什么意思呢?比如说上面gif图中的这些人物对象,有一些已被该用户添加为关心,那么当用户下一次进入该页面时,这些已经被添加关心的对象需要以“红心”状态显现出来。这个点的难度还不算大,只需要在每一次获取后端的内容后对标记对象进行状态更新即可。II.动态标记效果实现思路和步骤首先,整体的思路是利用动态类名对不同的元素进行选择。
360前端星计划-动画可以这么玩
马小蜗
动画的基本原理定时器改变对象的属性根据新的属性重新渲染动画functionupdate(context){//更新属性}constticker=newTicker();ticker.tick(update,context);动画的种类1、JavaScript动画操作DOMCanvas2、CSS动画transitionanimation3、SVG动画SMILJS动画的优缺点优点:灵活度、可控性、性能
Vue + Express实现一个表单提交
九旬大爷的梦
最近在折腾一个cms系统,用的vue+express,但是就一个表单提交就弄了好久,记录一下。环境:Node10+前端:Vue服务端:Express依赖包:vueexpressaxiosexpress-formidableelement-ui(可选)前言:axiosget请求参数是:paramsaxiospost请求参数是:dataexpressget接受参数是req.queryexpresspo
前端知识点
ZhangTao_zata
前端 javascript css
下面是一个最基本的html代码body{font-family:Arial,sans-serif;margin:20px;}//JavaScriptfunctionthatdisplaysanalertwhencalledfunctionshowMessage(){alert("Hello!Youclickedthebutton.");}MyFirstHTMLPageWelcometoMyPage
第三十一节:Vue路由:前端路由vs后端路由的了解
曹老师
1.认识前端路由和后端路由前端路由相对于后端路由而言的,在理解前端路由之前先对于路由有一个基本的了解路由:简而言之,就是把信息从原地址传输到目的地的活动对于我们来说路由就是:根据不同的url地址展示不同的页面内容1.1后端路由以前咱们接触比较多的后端路由,当改变url地址时,浏览器会向服务器发送请求,服务器根据这个url,返回不同的资源内容后端路由的特点就是前端每次跳转到不同url地址,都会重新访
华雁智科前端面试题
因为奋斗超太帅啦
前端笔试面试问题整理 javascript 开发语言 ecmascript
1.var变量的提升题目:vara=1functionfun(){console.log(b)varb=2}fun()console.log(a)正确输出结果:undefined、1答错了,给一个大嘴巴子,错误答案输出结果为:2,1此题主要考察var定义的变量,作用域提升的问题,相当于varaa=1functionfun(){varbconsole.log(b)b=2}fun()console.l
如何建设数据中台(五)——数据汇集—打破企业数据孤岛
weixin_47088026
学习记录和总结 中台 数据中台 程序人生 经验分享
数据汇集——打破企业数据孤岛要构建企业级数据中台,第一步就是将企业内部各个业务系统的数据实现互通互联,打破数据孤岛,主要通过数据汇聚和交换来实现。企业采集的数据可以是线上采集、线下数据采集、互联网数据采集、内部数据采集等。线上数据采集主要载体分为互联网和移动互联网两种,对应有系统平台、网页、H5、小程序、App等,可以采用前端或后端埋点方式采集数据。线下数据采集主要是通过硬件来采集,例如:WiFi
分布式锁和spring事务管理
暴躁的鱼
锁及事务 分布式 spring java
最近开发一个小程序遇到一个需求需要实现分布式事务管理业务需求用户在使用小程序的过程中可以查看景点,对景点地区或者城市标记是否想去,那么需要统计一个地点被标记的人数,以及记录某个用户对某个地点是否标记为想去,用两个表存储数据,一个地点表记录改地点被标记的次数,一个用户意向表记录某个用户对某个地点是否标记为想去。由于可能有多个用户同时标记一个地点,每个用户在前端点击想去按钮之后,后台接收到请求,从数据
前端CSS面试常见题
剑亦未配妥
前端面试 前端 css 面试
边界塌陷盒模型有两种:W3C盒模型和IE盒模型,区别在于宽度是否包含边框定义:同时给兄弟/父子盒模型设置上下边距,理论上边距值是两者之和,实际上不是注意:浮动和定位不会产生边界塌陷;只有块级元素垂直方向才会产生margin合并margin计算方案margin同为正负:取绝对值大的值一正一负:求和父子元素边界塌陷解决父元素可以通过调整padding处理;设置overflowhidden,触发BFC子
【JS】前端文件读取FileReader操作总结
程序员-张师傅
前端 前端 javascript 开发语言
前端文件读取FileReader操作总结FileReader是JavaScript中的一个WebAPI,它允许web应用程序异步读取用户计算机上的文件(或原始数据缓冲区)的内容,例如读取文件以获取其内容,并在不将文件发送到服务器的情况下在客户端使用它。这对于处理图片、文本文件等非常有用,尤其是当你想要在用户界面中即时显示文件内容或进行文件预览时。创建FileReader对象首先,你需要创建一个Fi
【前端】vue 报错:The template root requires exactly one element
程序员-张师傅
前端 前端 vue.js javascript
【前端】vue报错:Thetemplaterootrequiresexactlyoneelement在Vue.js中,当你遇到错误“Thetemplaterootrequiresexactlyoneelement”时,这通常意味着你的Vue组件的模板(template)根节点不是单一的元素。Vue要求每个组件的模板必须有一个根元素来包裹所有的子元素。这个错误通常出现在以下几种情况:模板中有多个并行
从单体到微服务:FastAPI ‘挂载’子应用程序的转变
黑金IT
fastapi 微服务 fastapi 架构
在现代Web应用开发中,模块化架构是一种常见的设计模式,它有助于将大型应用程序分解为更小、更易于管理的部分。FastAPI,作为一个高性能的PythonWeb框架,提供了强大的支持来实现这种模块化设计。通过“挂载”子应用程序,我们可以为不同的功能区域(如前端接口、管理员接口和用户中心)创建独立的应用程序,并将它们整合到一个主应用程序中。本文将详细介绍如何在FastAPI中使用“挂载”子应用程序的方
创建一个完整的购物商城系统是一个复杂的项目,涉及前端(用户界面)、后端(服务器逻辑)、数据库等多个部分。由于篇幅限制,我无法在这里提供一个完整的系统代码,但我可以分别给出一些关键部分的示例代码,涵盖几
uthRaman
前端 ui 服务器
前端(HTML/CSS/JavaScript)grsyzp.cnHTML页面结构(index.html)html购物商城欢迎来到购物商城JavaScript(Ajax请求商品数据,app.js)javascriptdocument.addEventListener('DOMContentLoaded',function(){fetch('/api/products').then(response=
了解 UNPKG:前端开发者的包管理利器
小于负无穷
前端 javascript typescript css html5 node.js
在现代前端开发中,JavaScript包管理和模块化是至关重要的,而npm则是最流行的JavaScript包管理器之一。不过,随着前端项目复杂性的增加,有时候我们希望快速引入外部依赖,而无需本地安装和构建。此时,CDN(内容分发网络)成为了一种方便快捷的解决方案,而UNPKG就是这种方式中的佼佼者。什么是UNPKG?UNPKG是一个基于npm的内容分发网络(CDN),它允许开发者直接通过URL从n
前端three.js的Sprite模拟下雪动画效果
qq_35430208
three.js 前端 javascript 三维场景中下雪效果 threejs实现下雪效果
一、效果如图所示:二、原理同下雨一样三、完整代码:index.jsimport*asTHREEfrom'three';import{OrbitControls}from'three/addons/controls/OrbitControls.js';importmodelfrom'./model.js';//模型对象//场景constscene=newTHREE.Scene();scene.add
系列3:【深入】qiankun动态与按需加载子应用—像电影一样控制出现时机
rabbit_it
qiankun学习 前端框架 前端 阿里云
一、引言:为何需要动态加载在现代前端开发中,性能优化始终是一个关键问题。对于微前端架构而言,管理多个子应用带来了前所未有的灵活性,但也对资源的加载和使用效率提出了更高要求。假设你的微前端项目就像一场电影,而子应用是场景或演员。在不同的情节中,我们只需要特定的场景和演员出现,而不需要所有场景和演员一开始就站在舞台上等待。这时,动态加载和按需加载就成为了关键工具——让需要的内容在正确的时机上场,节省性
ODOO不同版本与平台选择
chouchengyin2080
c# 操作系统 运维
1.10.0vs11.0vs8.0截至2017年底,最新的ODOO发布版为ODOO11.0,但功能上有一定精简(去除财务模块,去除工作流支持),技术上变动较大(代码逐步迁移至Python3,前端框架改写得抽象)。所以如果是从生产使用的角度来讲,ODOO10.0是当前最好选择,因为其更稳定,第三方模块也更多更全面。而如果是ODOO技术爱好从业者,则逐步迁移至ODOO11.0也有必要,因为其底层技术架
Nuxt Kit 自动导入功能:高效管理你的模块和组合式函数
qcidyu
好用的工具集合 代码效率 前端技巧 Vue开发 组合式函数 模块管理 自动导入 Nuxt Kit
title:NuxtKit自动导入功能:高效管理你的模块和组合式函数date:2024/9/14updated:2024/9/14author:cmdragonexcerpt:通过使用NuxtKit的自动导入功能,您可以更高效地管理和使用公共函数、组合式函数和VueAPI。无论是单个导入、目录导入还是从第三方模块导入,您都可以通过简单的API调用轻松实现。categories:前端开发tags:N
VMware Workstation 11 或者 VMware Player 7安装MAC OS X 10.10 Yosemite
iwindyforest
vmware mac os 10.10 workstation player
最近尝试了下VMware下安装MacOS 系统,
安装过程中发现网上可供参考的文章都是VMware Workstation 10以下, MacOS X 10.9以下的文章,
只能提供大概的思路, 但是实际安装起来由于版本问题, 走了不少弯路, 所以我尝试写以下总结, 希望能给有兴趣安装OSX的人提供一点帮助。
写在前面的话:
其实安装好后发现, 由于我的th
关于《基于模型驱动的B/S在线开发平台》源代码开源的疑虑?
deathwknight
JavaScript java 框架
本人从学习Java开发到现在已有10年整,从一个要自学 java买成javascript的小菜鸟,成长为只会java和javascript语言的老菜鸟(个人邮箱:deathwknight@163.com)
一路走来,跌跌撞撞。用自己的三年多业余时间,瞎搞一个小东西(基于模型驱动的B/S在线开发平台,非MVC框架、非代码生成)。希望与大家一起分享,同时有许些疑虑,希望有人可以交流下
平台
如何把maven项目转成web项目
Kai_Ge
maven MyEclipse
创建Web工程,使用eclipse ee创建maven web工程 1.右键项目,选择Project Facets,点击Convert to faceted from 2.更改Dynamic Web Module的Version为2.5.(3.0为Java7的,Tomcat6不支持). 如果提示错误,可能需要在Java Compiler设置Compiler compl
主管???
Array_06
工作
转载:http://www.blogjava.net/fastzch/archive/2010/11/25/339054.html
很久以前跟同事参加的培训,同事整理得很详细,必须得转!
前段时间,公司有组织中高阶主管及其培养干部进行了为期三天的管理训练培训。三天的课程下来,虽然内容较多,因对老师三天来的课程内容深有感触,故借着整理学习心得的机会,将三天来的培训课程做了一个
python内置函数大全
2002wmj
python
最近一直在看python的document,打算在基础方面重点看一下python的keyword、Build-in Function、Build-in Constants、Build-in Types、Build-in Exception这四个方面,其实在看的时候发现整个《The Python Standard Library》章节都是很不错的,其中描述了很多不错的主题。先把Build-in Fu
JSP页面通过JQUERY合并行
357029540
JavaScript jquery
在写程序的过程中我们难免会遇到在页面上合并单元行的情况,如图所示
如果对于会的同学可能很简单,但是对没有思路的同学来说还是比较麻烦的,提供一下用JQUERY实现的参考代码
function mergeCell(){
var trs = $("#table tr");
&nb
Java基础
冰天百华
java基础
学习函数式编程
package base;
import java.text.DecimalFormat;
public class Main {
public static void main(String[] args) {
// Integer a = 4;
// Double aa = (double)a / 100000;
// Decimal
unix时间戳相互转换
adminjun
转换 unix 时间戳
如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript Math.round(new Date().getTime()/1000)
getTime()返回数值的单位是毫秒 Microsoft .NET / C# epoch = (DateTime.Now.ToUniversalTime().Ticks - 62135
作为一个合格程序员该做的事
aijuans
程序员
作为一个合格程序员每天该做的事 1、总结自己一天任务的完成情况 最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多
2、考虑自己明天应该做的主要工作 把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作
3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法 出错不要紧,最重
由html5视频播放引发的总结
ayaoxinchao
html5 视频 video
前言
项目中存在视频播放的功能,前期设计是以flash播放器播放视频的。但是现在由于需要兼容苹果的设备,必须采用html5的方式来播放视频。我就出于兴趣对html5播放视频做了简单的了解,不了解不知道,水真是很深。本文所记录的知识一些浅尝辄止的知识,说起来很惭愧。
视频结构
本该直接介绍html5的<video>的,但鉴于本人对视频
解决httpclient访问自签名https报javax.net.ssl.SSLHandshakeException: sun.security.validat
bewithme
httpclient
如果你构建了一个https协议的站点,而此站点的安全证书并不是合法的第三方证书颁发机构所签发,那么你用httpclient去访问此站点会报如下错误
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path bu
Jedis连接池的入门级使用
bijian1013
redis redis数据库 jedis
Jedis连接池操作步骤如下:
a.获取Jedis实例需要从JedisPool中获取;
b.用完Jedis实例需要返还给JedisPool;
c.如果Jedis在使用过程中出错,则也需要还给JedisPool;
packag
变与不变
bingyingao
不变 变 亲情永恒
变与不变
周末骑车转到了五年前租住的小区,曾经最爱吃的西北面馆、江西水饺、手工拉面早已不在,
各种店铺都换了好几茬,这些是变的。
三年前还很流行的一款手机在今天看起来已经落后的不像样子。
三年前还运行的好好的一家公司,今天也已经不复存在。
一座座高楼拔地而起,
【Scala十】Scala核心四:集合框架之List
bit1129
scala
Spark的RDD作为一个分布式不可变的数据集合,它提供的转换操作,很多是借鉴于Scala的集合框架提供的一些函数,因此,有必要对Scala的集合进行详细的了解
1. 泛型集合都是协变的,对于List而言,如果B是A的子类,那么List[B]也是List[A]的子类,即可以把List[B]的实例赋值给List[A]变量
2. 给变量赋值(注意val关键字,a,b
Nested Functions in C
bookjovi
c closure
Nested Functions 又称closure,属于functional language中的概念,一直以为C中是不支持closure的,现在看来我错了,不过C标准中是不支持的,而GCC支持。
既然GCC支持了closure,那么 lexical scoping自然也支持了,同时在C中label也是可以在nested functions中自由跳转的
Java-Collections Framework学习与总结-WeakHashMap
BrokenDreams
Collections
总结这个类之前,首先看一下Java引用的相关知识。Java的引用分为四种:强引用、软引用、弱引用和虚引用。
强引用:就是常见的代码中的引用,如Object o = new Object();存在强引用的对象不会被垃圾收集
读《研磨设计模式》-代码笔记-解释器模式-Interpret
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
package design.pattern;
/*
* 解释器(Interpreter)模式的意图是可以按照自己定义的组合规则集合来组合可执行对象
*
* 代码示例实现XML里面1.读取单个元素的值 2.读取单个属性的值
* 多
After Effects操作&快捷键
cherishLC
After Effects
1、快捷键官方文档
中文版:https://helpx.adobe.com/cn/after-effects/using/keyboard-shortcuts-reference.html
英文版:https://helpx.adobe.com/after-effects/using/keyboard-shortcuts-reference.html
2、常用快捷键
Maven 常用命令
crabdave
maven
Maven 常用命令
mvn archetype:generate
mvn install
mvn clean
mvn clean complie
mvn clean test
mvn clean install
mvn clean package
mvn test
mvn package
mvn site
mvn dependency:res
shell bad substitution
daizj
shell 脚本
#!/bin/sh
/data/script/common/run_cmd.exp 192.168.13.168 "impala-shell -islave4 -q 'insert OVERWRITE table imeis.${tableName} select ${selectFields}, ds, fnv_hash(concat(cast(ds as string), im
Java SE 第二讲(原生数据类型 Primitive Data Type)
dcj3sjt126com
java
Java SE 第二讲:
1. Windows: notepad, editplus, ultraedit, gvim
Linux: vi, vim, gedit
2. Java 中的数据类型分为两大类:
1)原生数据类型 (Primitive Data Type)
2)引用类型(对象类型) (R
CGridView中实现批量删除
dcj3sjt126com
PHP yii
1,CGridView中的columns添加
array(
'selectableRows' => 2,
'footer' => '<button type="button" onclick="GetCheckbox();" style=&
Java中泛型的各种使用
dyy_gusi
java 泛型
Java中的泛型的使用:1.普通的泛型使用
在使用类的时候后面的<>中的类型就是我们确定的类型。
public class MyClass1<T> {//此处定义的泛型是T
private T var;
public T getVar() {
return var;
}
public void setVa
Web开发技术十年发展历程
gcq511120594
Web 浏览器 数据挖掘
回顾web开发技术这十年发展历程:
Ajax
03年的时候我上六年级,那时候网吧刚在小县城的角落萌生。传奇,大话西游第一代网游一时风靡。我抱着试一试的心态给了网吧老板两块钱想申请个号玩玩,然后接下来的一个小时我一直在,注,册,账,号。
彼时网吧用的512k的带宽,注册的时候,填了一堆信息,提交,页面跳转,嘣,”您填写的信息有误,请重填”。然后跳转回注册页面,以此循环。我现在时常想,如果当时a
openSession()与getCurrentSession()区别:
hetongfei
java DAO Hibernate
来自 http://blog.csdn.net/dy511/article/details/6166134
1.getCurrentSession创建的session会和绑定到当前线程,而openSession不会。
2. getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭。
这里getCurrentSession本地事务(本地
第一章 安装Nginx+Lua开发环境
jinnianshilongnian
nginx lua openresty
首先我们选择使用OpenResty,其是由Nginx核心加很多第三方模块组成,其最大的亮点是默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用。借助于Nginx的事件驱动模型和非阻塞IO,可以实现高性能的Web应用程序。而且OpenResty提供了大量组件如Mysql、Redis、Memcached等等,使在Nginx上开发Web应用更方便更简单。目前在京东如实时价格、秒
HSQLDB In-Process方式访问内存数据库
liyonghui160com
HSQLDB一大特色就是能够在内存中建立数据库,当然它也能将这些内存数据库保存到文件中以便实现真正的持久化。
先睹为快!
下面是一个In-Process方式访问内存数据库的代码示例:
下面代码需要引入hsqldb.jar包 (hsqldb-2.2.8)
import java.s
Java线程的5个使用技巧
pda158
java 数据结构
Java线程有哪些不太为人所知的技巧与用法? 萝卜白菜各有所爱。像我就喜欢Java。学无止境,这也是我喜欢它的一个原因。日常
工作中你所用到的工具,通常都有些你从来没有了解过的东西,比方说某个方法或者是一些有趣的用法。比如说线程。没错,就是线程。或者确切说是Thread这个类。当我们在构建高可扩展性系统的时候,通常会面临各种各样的并发编程的问题,不过我们现在所要讲的可能会略有不同。
开发资源大整合:编程语言篇——JavaScript(1)
shoothao
JavaScript
概述:本系列的资源整合来自于github中各个领域的大牛,来收藏你感兴趣的东西吧。
程序包管理器
管理javascript库并提供对这些库的快速使用与打包的服务。
Bower - 用于web的程序包管理。
component - 用于客户端的程序包管理,构建更好的web应用程序。
spm - 全新的静态的文件包管
避免使用终结函数
vahoa.ma
java jvm C++
终结函数(finalizer)通常是不可预测的,常常也是很危险的,一般情况下不是必要的。使用终结函数会导致不稳定的行为、更差的性能,以及带来移植性问题。不要把终结函数当做C++中的析构函数(destructors)的对应物。
我自己总结了一下这一条的综合性结论是这样的:
1)在涉及使用资源,使用完毕后要释放资源的情形下,首先要用一个显示的方