JavaScript
python 与其它语言的区别:
架构式 Learning JavaScript :
基本数据类型:
int : 声明一个int 类型:
<script>
var x;
x=12
alert(x)
</script>
string:
<scirpt> var name='tony /*如果不用var 那么它是全局变量*/ </script>
bollean:
bollean值也可以做算术运算:
<script> var b=false console.log(typeof b); </script>
undeined:
<script>
var x;
document.write(x)
</script>
null: 无值(no value)
<script>
var x=null;
document.write(x+123)
</script>
既然是值那就计算一下:
<script>
var x=null;
document.write(x+1==1)
</script>
玩一玩:
再玩一玩:
强制类型转换:
<script>//parseInt console.log(parseInt(3.534)) console.log(parseInt("3.fda")) console.log(parseInt("!3.fda"))//Not a Number:: NaN 当涉及数据转换成数字时,得不到结果就会得到这个数据类型 </script>
输出人生中的第一个hello world!
打印语句:
小窗口式打印:
alert(‘hello world!’)
<script> alert('hello world!') </script>
网页写入式打印
document.write(‘hello world!’)
<script> document.write('hello world!') </script>
控制台式打印
consol.log()
<script> console.log('hello world!') </script>
流程控制语句
if…..elif….else…
if案例1:
<script>
if (1){
console.log(false+1)//布尔值做运算
}
</script>
if else:
<script>
if (2<1){
console.log('success!')
}else{
console.log('faild')
}
</script>
var x=(new Date()).getDay() var y; if ((x==6) || (x==0)) {y='周末';} else{ y='工作日' }
循环语句
for…..
for (var j=1;j<=10;j++){ document.write("<h1>"+j+" "+"hello"+"</h1>") document.write("<br>") }
while ……
var i=0; while (i<10){ document.write("<h1>"+i+"</h1>"); i++; //break; }
异常语句
try:
…….
catch:
……..
finally:
…….
//异常语句 try{ console.log('hello') console.log(fda) } catch (e){ console.log(e) } finally { console.log('finally') }
JavaScript 对象:
数据对象
String对象的操作:
1、String字符串的创建
var str1='hello world'; #自动创建字符串对象,调用字符的对象属性或方法自动创建对象,用完就丢弃 var str1=new String("hello word"); #字符串对象的创建
2、字符串对象的属性:
console.log(s1.length);#获取字符串的长度
3、对象的方法:
obj.substr(start,end) #返回start end结束的子字符串
var s4="hello"; console.log(s4.substr(1,3))
obj.trim() #去除两边空格
console.log(s1.trim());
obj.charAt(index) #返回索引位置的字符
console.log(s1.charAt(10));
obj.indexOf(string,index) #从指定的索引位置查找指定的字符
console.log(s1.indexOf('o',5));
obj.match(str) #匹配指定字符,返回的是一个数组+返回匹配第一个字符其索引位置
console.log(s1.match("wor"));
子字符串处理方法
obj.substr(index,str) #从给出的索引位置,显示后面N个字符
console.log(s1.substr(5,3));
顾头不顾尾,显示索引1到4的字符
console.log(s1.substring(1,4));
slice 找字符索引返回值,顾头不顾尾
console.log(s1.slice(3,-1));
split() #按条件切割,返回一个数组
console.log(s1.split(' '));//返回一个数组对象
#返回值 ["hellow", "orld"]
concat 一个字符串与另一个字符串拼接
b='liang';
console.log(s1.concat(b));//字符串拼接
组合对象:
数组对象:
js中的数组可以装任意类型
arr4=[1,2,3] arr4[5]='abc' console.log(arr4)// 第3,4个都没有值,会空出来
//数组对象创建
//三种创建方式
var arr1=[1,2,3,4,32,33,25,100]; var arr2=new Array(2,3,4,56,'liang',[1,2,3]); var arr3=new Array(3); arr3[0]=12; arr3[1]=true; arr3[1]='hello';
遍历数组:
for (var i in arr1){ console.log(arr1[i]) }
数组属性:
array.length
//python 的join 是字符串的
//js的join方法是数组的
console.log(arr1.join(','));
console.log(arr1.toString(),']]]]]]]');//数组转换成字符串
console.log(typeof arr1.toString(),'\\\\\\\\\/');//数组转换成字符串
console.log(arr1.concat(['a','b']).length) //数组与数组拼接
数组排序:
console.log('数组排序')
console.log(arr1.reverse()) //这里排序的是ASCII码表的数字
console.log(arr1.sort(intstor2),'-----');
要是只按数组的数字大小来排序,只能重写sort 方法
function instor2(a,b){ return a-b }
//数组切片slice
console.log(arr1.slice(1,3)); console.log(arr1.slice(-4,-1)); //[1, 2, 3, 4, 25, 32, 33, 100] console.log(arr1) console.log(arr1.splice(1,3),'---',arr1)//删除第二个位置后的三个元素 console.log(arr1.splice(1,0,-55,'f'),arr1);//[1,-55,'f',2,3,4,32,33,25,100] //为0的时候是插入值
math对象
//数学相关的方法
//调用方法
console.log(Math.abs(3.43000)) a=[1,2,3,4] console.log(Math.floor(Math.random()*100),'----') console.log(Math.round(Math.random()*100)) //取0到100的随机数 console.log(Math.floor(3.194949493)) #取整 console.log(Math.pow(3,2)) #取整
Data对象:
创建对象:
var date=new Date(); console.log(date);
对象方法:
console.log(date.toLocaleString())//返回的是一个时间字符串 console.log(date.toUTCString()) #Wed, 24 May 2017 10:57:28 GMT
//参数为日期字符串,指定日期
var nowd2=new Date('2004/12/20 11:12') console.log(nowd2.toLocaleString()) 2004/12/20 上午11:12:00 console.log(nowd2.toUTCString()) Mon, 20 Dec 2004 03:12:00 GMT
获取日期:
console.log(nowd2.getDay(),'------------')
console.log(nowd2.getDate())
获取年:
console.log(nowd2.getFullYear())
练习:
要一个这样的格式显示当前时间:
onsole.log(date.getFullYear()+'-'+(date.getMonth()+1)+'-'+date.getDate()+' '+date.getHours()+':'+date.getMinutes()+':'+date.getMinutes()+' '+change(week)) function change(week) { var arr=['星期日','星期一','星期二','星期三','星期四','星期五','星期六'] return arr[week] } week=date.getDay()
函数对象:
1、函数的创建
function 函数名 (参数){ 函数体; return 返回值;
Example:
function foo() { console.log('ok') //return ('ok') }
var ret=foo()//函数没有返回值,初始化完没有定义的时候会undifined
call:
console.log(ret)
console.log('function sayhello')
再来一个例子:
function sayHello(name,age) { console.log('hello',name) }
调用:
sayHello('tony')
//创建方式二 :函数也是对象,不推荐使用这种方式
var sayhello=new Function('name',"alert('heloo'+name)"); sayhello('liang') #调用
函数的加载顺序:
2、函数方法:
function sayHello(name,age) {
console.log('hello',name)
}
console.log(sayHello.length);//获取的是函数的接收参数的个数,这里是2(因为上面有个形参数)
练习:
用函数写出两个值相加的和:
function add(a,b) { console.log(a+b,'-----') //NaN 在未定义,未转换类型的时候出现 ,如果这里加个 a+b+c c是定义了未赋值的,并且这里用了+号做相加,c不是一个数字就是会 NaN console.log(b)
重要练习题二:
function a(a,b) { console.log(a+b); }
var a=1;
var b=2;
a(a,b)
函数的内置对象
函数的内置对象 arguments 接收变长参数
//求1到100的和 function add() { console.log(arguments); console.log(typeof arguments); var sum for (var i in arguments){ sum+=arguments[i] } return sum } console.log(add(1,3,4,5,6,...100))
匿名函数:
注意看function后面,没有名字,但是不应该这么用
var func=function (arg) { return arg } console.log(func('tonfdas'))
应该这么用:
console.log((function(arg){ return arg; })('yu'));
堆栈|出栈
栈操作
JS 里面的push pop堆栈是:,后进先出,值的位置在最后堆入
console.log(arr1.push('tony'),arr1) //堆栈,
console.log(arr1.pop(),arr1); //出栈
console.log(arr1.pop(),arr1);
shift unshift//后进先出,但是位置在最前
console.log(arr1.unshift('yu'),arr1,'unshift')
console.log(arr1.shift(),arr1,'shift')
BOM对象
·写一个3秒的小窗口,进入一个页面,小窗口弹出3秒后消失。
setInterval() 配合 clearInterval()
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function foo() {
console.log('ok')
}
t=setInterval(foo,3);
clearInterval(t); // 在等3秒钟的时候就已经取消了,所以上面的ok就没有显示
</script>
</head>
·
写一个时钟定时器,当鼠标点进入input时,时间在走,当‘单击’click 时,时钟停止
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function bar(){
//获取当前时间字符串
var curr_time=new Date()
var s_time=curr_time.toLocaleString()
//document指的是整个页面的对象,每一个标签都是一个对象,找到标签,对value赋值
var ele=document.getElementById("timer")//打页面中的标签的id
//下面的input标签
//调用
ele.value=s_time//input里的value 这是它的默认值
console.log(ele)
};
var ID;
function start(){
if (ID==undefined){
bar();
ID=setInterval(bar,1000);
}
}
function stop() {
clearInterval(ID);
ID=undefined;
}
</script>
</head>
<body>
<p>
<!--在input获取光标后,在input中显示当前时间,只有当光标进入input的时候,事件才会触发 -->
<input type="text" id="timer" onfocus="start()"> <button onclick="stop()" id="butt">click</button><!--onfocus 获取光标事件-->
</p>
</body>
</html>
DOM对象
Document Object Model
html文档中的每个成分都是一个分节点:DOM定义了访问和操作HTML文档标准方法
DOM规定:
::整个文档都是一个文档节点
::每个HTML标签是一个元素节点
::包含在HTML元素中的文本是文本节点
::每一个HTML属性是一个属性节点
::::::::其中,Document 与element节点是重点。
DOM对象的组成:
·········································DOM 对象的组成····························································
DOM对象就是由对象组成,document,element
节点查找
全局查找
<h5> 寻找标签 </h5> <p name="liang">hello P</p> <div class="c1"> <div class="c2">c2222</div> <p>c1-p</p> </div> <a href="#" id="ID1"></a> <script>//script标签,操作哪个标签就放在哪个标签下 //只要是document.get.....都是全局查找 var eles=document.getElementsByTagName('P'); var eles=document.getElementById('ID1'); var eles=document.getElementsByClassName("c1"); var eles=document.getElementsByName('liang');
eles[0] //这是局部查找
console.log(eles[0])
·······节点操作·········:
····添加节点·····
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
//节点操作
//添加节点
function foo(){
//创建标签对象
var ele=document.createElement("img")
//为标签赋值属性
ele.setAttribute("src","guan.png")
ele.src='guan.png'//DHTML表示方法
console.log(ele)
var con=document.getElementsByClassName("img")[0];
//在父标签添加子标签
//添加节点appendChild(new_node)
//insertBefore(newnode,某个节点);
con.appendChild(ele)
}
</script>
</head>
<body>
<h1>DOM 节点操作</h1>
<div class="img">我是被添加的,虽然是一张图
<button onclick="foo()">add</button>
</body>
</html>
删除标签 ·····节点操作········
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
//节点操作
// 删除节点
function bar() { #删除节点从img 这个父标签找到子标签的位置然后将其删除
var con=document.getElementsByClassName("img")[0];
ele_h1=con.getElementsByTagName("h1")[0];
con.removeChild(ele_h1);
//替换节点操作
//con.replaceChild('p','h3')
}
</script>
</head>
<body>
<h1>DOM 节点操作</h1>
<!--删除标签-->
<div class="img">
<h1>你一点del我就被删除了</h1>
<button onclick="bar()">del</button></div>
</body>
</html>
替换标签:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
//节点操作
// 替换节点
function bar() {
//var con=document.getElementById("op").childNodes;
var con=document.getElementById("op");
be_repl=con.childNodes[3];
console.log(con.childNodes,'----------');
//替换节点操作
var replace_element=document.createElement("p");
replace_element.innerText="我是替换的内容"
con.replaceChild(replace_element,con.childNodes[3]);
}
</script>
</head>
<body>
<h1>DOM 节点操作</h1>
<!--替换标签-->
<div class="img" id="op">
<p id="p1"></p>
<h1>我将会被替换</h1>
<button onclick="bar()">del</button>
</div>
<button onclick="foo()">add</button>
ID属性操作:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.item .c1{
display: none;
}
#p2{
color: red;
}
</style>
</head>
<body>
<h1 id="hone">我是h1, 我会变小</h1>
<p id="p2">Hello world!</p>
<script>//script标签,操作哪个标签就放在哪个标签下
//节点属性操作
document.getElementById("p2").style.color="blue";
document.getElementById("hone").style.fontSize="10px";
</script>
</body>
</html>
1、获取文本节点的值:innerText innerHTML
2、attribute操作
elementNode.setAttribute(name,value) elementNode.getAttribute(属性名) <-------------->elementNode.属性名(DHTML) elementNode.removeAttribute(“属性名”);
this 的重要性:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
//window.alert('hello')
//var ret=confirm('是否继续')
//console.log(ret)
//var res=prompt('请输入一个值:')
//console.log(res)
</script>
</head>
<body>
<h1>this 的重要性,可以简写一些代码直接通过this来操作</h1>
<p>我被this 赋予了属性</p>
<h1>再来一个</h1>
<p class="am">我们两个被this 赋予了属性</p>
<p class="am">我们两个被this 赋予了属性</p>
<script>
var eles=document.getElementsByTagName("p")[0];
console.log(eles);
eles.onclick=function (){
console.log(this);
alert(this.innerText);
};
var ele=document.getElementsByClassName("am");
for (var i=0;i<ele.length;i++){
ele[i].onclick=function () {
alert(this.innerText);
}
}
</script>
</body>
</html>
练习:跑马灯
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.one{
border:1px solid red;
width:50px;
float: left;
text-align: center;
background-color: #84a42b;
}
.hid{
display: none;
}
.p1{
background-color: #2d374b;
line-height: 50px;
text-align: center;
color: white;
}
</style>
</head>
<body>
<script>
console.log(res)
function foo1(self) {
var res=document.getElementsByTagName("div");
res1=res.getElementsByTagName("one")[0]
res.removeChild(res1)
//alert(123)
walk=0
for (var i=0;i<res.length;i++){
res[i].createAttribute()
}
setInterval(fool,1000);
// console.log(self) //指代的是当前操作的标签
//console.log(self.nextElementSibling)
//var ele=self.nextElementSibling;
//ele.style.display="block";
//console.log(self.parentElement)
}
function start() {
setInterval(pao,800);
}
function pao() {
var res1=document.getElementsByClassName("p1")[0];
var content=res1.innerText;
var first_char=content.charAt(0);
var later_string=content.substring(1,content.length);
var new_content=later_string+first_char;
res1.innerText=new_content;
}
</script>
<div class="p1"> new balance</div>
<button onclick="start()">start</button>
<div>
<div class="model"></div>
<div class="one">a</div>
<div class="one">b</div>
<div class="one">c</div>
<div class="one">d</div>
<p onclick="foo1(this)">点我吖</p>
</div>
</body>
</html>
Event (事件)
onclick 单击事件
ondblclick 双击事件
<div onclick="alert('单击事件')">单击事件</div>
<div ondblclick="alert('双击事件')">双击事件</div>
元素获得焦点-事件
onblur 属性在元素失去焦点时触发。
onblur 常用于表单验证代码(例如用户离开表单字段)。
语法:
<element onblur="script">
Example:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function enter(self) {
self.value=""
}
function exit(self) {
if (self.value.trim()==""){
self.value="请输入姓名"
}
}
</script>
</head>
<body>
<div>元素获得焦点
<input type="text" value="请点击" onfocus="enter(this)" onblur="exit(this)">
</div>
</body>
</html>
onchange
onchange 事件会在域的内容改变时发生。
onchange 事件也可用于单选框与复选框改变后触发的事件。
二级联动EXAMPLE:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>onchange 事件</p>
<p>this 表示的就是这个标签名console.log(this)</p>
<select class="select_pro">
<option value="1">河南省</option>
<option value="2">湖南省</option>
<option value="3">云南省</option>
</select>
<select class="select_city"></select>
<div class="citys">
</div>
<script>
info={"河南省":["郑州","洛阳","开封"],"湖南省":["湘潭","岳阳","长沙"],"云南省":["大理","昆明"]};
var ele=document.getElementsByClassName("select_pro")[0];
var ele_2=document.getElementsByClassName("select_city")[0];
ele.onchange=function() {
var arrs = ele.children;
var sindex = this.selectedIndex;
var province = arrs[sindex].innerText;
var citys_arr = info[province];
console.log(citys_arr);
//解决城市叠加问题
ele2_children = ele_2.children;
for (var j = 0; j < ele2_children.length; j++) {
ele_2.removeChild(ele2_children[0])
}
for (var i = 0; i < citys_arr.length;i++) {
var option = document.createElement("option")
//console.log(option)
option.innerText = citys_arr[i]
ele_2.appendChild(option)
}
}
</script>
</body>
</html>
table选择:如图:用JS实现效果

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tonycloud</title>
<script>
</script>
<style>
.all{
width:400px;
border:1px solid black;
height:300px;
text-align: center;
}
.content_right{
float: left;
}
.top_ten20px{
margin-top: 0px;
}
.choice {
width:100px;
height:60px;
float: left;
margin-top: 40px;
margin-left: 10px;
margin-right: 10px;
}
.content_left{
float: left;
}
#left{
margin-left: 40px;
width:100px;
height:200px;
border:1px solid black;
}
#right{
width:100px;
height:200px;
border:1px solid black;
}
</style>
</head>
<body>
<h1>select server</h1>
<div class="all">
<div class="content_left top_ten20px">
<p>opt</p>
<select name="" id="left" multiple size="4">
<option value="">firewall</option>
<option value=""> load balancing</option>
<option value="">security group </option>
<option value="">meta data</option>
</select>
</div>
<div class="choice top_ten20px">
<span>
<button id="move_right"> > </button>
<button id="move_right_all"> >> </button>
</span>
<span>
<button id="move_left"> < </button>
<button id="move_left_all"> << </button>
</span>
</div>
<div class="content_right top_ten20px">
<p>selected</p>
<select name="" id="right" multiple>
<option value="">ceph</option>
</select>
</div>
</div>
<script>
var move_right=document.getElementById("move_right");
var move_right_all=document.getElementById("move_right_all");
var left=document.getElementById("left");
var move_left=document.getElementById("move_left");
var move_left_all=document.getElementById("move_left_all");
var right=document.getElementById("right");
var option_arr=left.options;
var option_arrtwo=right.options;
console.log(option_arr);
//左边单选按钮 移动 一个元素到右边
move_right.onclick=function () {
for (var i=0;i<option_arr.length;i++){
var option=option_arr[i];
if (option.selected){
right.appendChild(option);
i--;
}
}
}
//左边全选按钮
move_right_all.onclick=function () {
for (var i=0;i<option_arr.length;i++){
right.appendChild(option_arr[i]);
i--;
}
}
//右边单选按钮
move_left.onclick=function () {
for (var i=0;i<option_arrtwo.length;i++){
var option=option_arrtwo[i];
if(option.selected){
left.appendChild(option);
i--;
}
}
}
//右边全选按钮
move_left_all.onclick=function () {
for (var i=0;i<option_arrtwo.length;i++){
left.appendChild(option_arrtwo[i])
i--;
}
}
</script>
</body>
</html>
表格选择器

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>优化table</title>
<style>
*{
margin: 0px;
}
.all{
position: relative;
width:250px;
height:300px;
border:1px solid black;
}
.tr{
border:1px solid black;
}
</style>
</head>
<body>
<h1><i>表格优化代码</i></h1>
<div class="all">
<div>
<button class="all_select">all</button>
<button class="reverse_select">reverse</button>
<button class="cancel_select">cancel</button>
</div>
<table class="server_tb" border="1px">
<tr>
<td><input type="checkbox" class="item"></td>
<td class="tr">1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td><input type="checkbox" class="item"></td>
<td>1</td>
<td>2</td>
<td>3 </td>
</tr>
<tr>
<td><input type="checkbox" class="item"></td>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
</table>
</div>
<script>
var ele_all=document.getElementsByClassName("all_select")[0];
console.log(ele_all)
var ele_reverse_select=document.getElementsByClassName("reverse_select")[0];
var ele_cancel_select=document.getElementsByClassName("cancel_select")[0];
var input_arr=document.getElementsByClassName("item");
var button=document.getElementsByTagName("button")
//console.log(button)
//console.log(button[0].innerText)
for (var i=0;i<button.length;i++) {
butt = button[i]
console.log(butt.innerText)
if (butt.innerText == 'all') {
butt.onclick = function () {
for (var i = 0; i < input_arr.length; i++) {
console.log(input_arr[i])
var input = input_arr[i];
console.log(input)
input.checked = true;
}
}
}
if (butt.innerText == 'reverse') {
butt.onclick = function () {
for (var i = 0; i < input_arr.length; i++) {
var input = input_arr[i]
if (input.checked) {
input.checked = false;
}
else {
input.checked = true;
}
}
}
}
else if (butt.innerText == "cancel") {
butt.onclick = function () {
for (var i = 0; i < input_arr.length; i++) {
var input = input_arr[i]
if (input.checked) {
input.checked = false;
}
else {
input.checked = true;
}
}
}
}
}
/*
ele_all.onclick=function () {
for (var i=0;i<input_arr.length;i++){
console.log(input_arr[i])
var input=input_arr[i];
console.log(input)
input.checked=true;
}
}
ele_cancel_select.onclick=function () {
for (var i=0;i<input_arr.length;i++){
var input=input_arr[i];
input.checked=false;
}
}
ele_reverse_select.onclick=function () {
for (var i=0;i<input_arr.length;i++){
var input=input_arr[i]
if (input.checked){
input.checked=false;
}
else {
input.checked=true;
}
}
}
*/
</script>
</body>
</html>




![~TL334Q]5RLWW`_)XPG(K(D ~TL334Q]5RLWW`_)XPG(K(D](https://images2015.cnblogs.com/blog/1039696/201705/1039696-20170523164439101-1308280839.png)
![Z4}ST)X}O]CQYQ$~CMDWKRE Z4}ST)X}O]CQYQ$~CMDWKRE](https://images2015.cnblogs.com/blog/1039696/201705/1039696-20170523164444632-692020179.png)












浙公网安备 33010602011771号