Python 第十三篇之一:前端页面 js和dome
一:JavaScript:
JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理。
1、位置:
<!-- 方式一 --> <script type"text/javascript" src="JS文件"></script> <!-- 方式二 --> <script type"text/javascript"> Js代码内容 </script>
2、JavaScript代码存在位置
- HTML的head中
- HTML的body代码块底部(推荐)
由于Html代码是从上到下执行,如果Head中的js代码耗时严重,就会导致用户长时间无法看到页面,如果放置在body代码块底部,那么即使js代码耗时严重,也不会影响用户看到页面效果,只是js实现特效慢而已。
如: <script src="https://www.gstatic.com/og/_/js/k=og.og2.en_US.iF4jnkQuaf0.O/rt=j/t=zcms/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTv5-POC4Ks9GtGRdY2ywUWisqz7-Q"></script> <script> alert('123'); </script>
例如2,先写正常的代码,将JavaScript写在最下端:
<body>
<h1>xxxxxx</h1>
<script>
function f1() {
alert("f1")
}
f1()
</script>
</body>
3、变量
全局变量
局部变量
JavaScript中变量的声明是一个非常容易出错的点,局部变量必须一个 var 开头,如果未使用var,则默认表示声明的是全局变量
var name = "seven" # 局部变量
age = 18 # 全局变量
注释:
//
或
/* */
4、基本数据类型:
数字(Number)
1
2
3
4
5
var page = 111; #整数
var age = Number(18); #数值
var a1 = 1,a2 = 2, a3 = 3; #多个局部变量
parseInt("1.2"); #转换成整数
parseFloat("1.2"); #抓换成浮点数
字符串(String):
var name = "jack"; var name = String("jack"); var age_str = String(18); 常用方法: obj.trim() obj.charAt(index) obj.substring(start,end) obj.indexOf(char) obj.length 可以在google浏览器的调试模式的console接口进行调试: 布尔(Boolean): var status = true; var status = false; var status = Boolen(1==1) 数组(Array): var names = ['jack', 'tom', 'eric'] 常用方法: 添加 obj.push(ele) 追加 obj.unshift(ele) 最前插入 obj.splice(index,0,'content') 指定索引插入 移除 obj.pop() 数组尾部获取 obj.shift() 数组头部获取 obj.splice(index,count) 数组指定位置后count个字符 切片 obj.slice(start,end) 合并 newArray = obj1.concat(obj2) 翻转 obj.reverse() 字符串化 obj.join('_') 长度 obj.length 字典 var items = {'k1': 123, 'k2': 'tony'} 获取值 items.k1(); 序列化: #将字典转换为字符串 s1 = JSON.stringify(items) "{"k1":123,"k2":"tony"}" 将字符串序列化为对象: s2 = JSON.parse(s1) Object {k1: 123, k2: "tony"} s2 Object {k1: 123, k2: "tony"}
undefined:
undefined表示未定义值
var name;
null:
null是一个特殊值
5、循环语句:
var names = ["jack", "tony", "rain"]; // 数组:方式一 for(var i=0;i<names.length;i++){ console.log(i); console.log(names[i]); }
如图:
//属组:方式二
var names = {"name": "jack", "age": 18};
for(var index in names){
console.log(index);
console.log(names[index]);
}
如图:
//字典循环:
// 字典:方式一
var names = {"k1":"v1","k2":"v2"}
undefined
for(var index in names){
console.log(index);
console.log(names[index]);
}
如图:
while 循环:
while(条件){
// break;
// continue;
}
6、条件语句:
//if条件语句
if(条件){
}else if(条件){
}else{
}
var username= 'jack';
var age = 111;
// switch,case语句
switch(age){
case 111:
console.log("111");
break;
case 222:
console.log("222");
break;
default :
console.log("333");
age = 333;
}
7、异常处理:
try{
}catch(e) {
}finally{
}
#try是正常代码块,catch(e)捕获指定错误,finally当上面都没有执行的时候执行
8、函数:
函数1: function Foo (name,age) { this.Name = name; this.Age = age; this.Func = function(arg){ return this.Name + arg; } } var obj = new Foo('jack', 18); var ret = obj.Func("sb"); console.log(ret); 函数2: function func(arg){ console.log(arg); return "uuu" } func("jack"); var ret = func("123"); console.log(ret); 函数3:匿名函数 var f= function(arg){ console.log(arg) }; f("123"); 函数4--自执行函数: <script> (function(){ console.log("abc"); })(); </script>
函数5--自执行参数2-带参数: <script> (function(arg){ console.log("jack",arg); })("tom"); </script>
8、面向对象:基于函数加原型构造数类似于面向对象的功能
<script> function Foo(name,age){ this.Name = name; this.Age = age; this.Func = function(arg){ return this.Name + arg; } } var obj = new Foo("jack",18); console.log(obj.Name); console.log(obj.Age); var ret = obj.Func("sb"); console.log(ret); </script>
二:Dom
文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口。它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。我们最为关心的是,DOM把网页和脚本以及其他的编程语言联系了起来。DOM属于浏览器,而不是JavaScript语言规范里的规定的核心内容。
注:一般说的JS让页面动起来泛指JavaScript和Dom
默认格式是查找内容-->操作内容:
修改内容:
tags = document.getElementsByTagName('h1'); #根据tagName修改: [<h1>xxx</h1>, <h1>yyy</h1>] tags = document.getElementsByTagName('h1'); [<h1>xxx</h1>, <h1>yyy</h1>] tags[0]; <h1>xxx</h1> tags[0].innerText = "1234"; "1234" tags[1].innerText = "2234"; "2234"
1、选择器:
<script type="text/javascript"> var nid = document.getElementById('n1'); //根据标签的id取值,id在性别选择和checkbox的时候是一样的,其他时候不能一样 nid.innerText = "jack"; </script> <script type="text/javascript"> //不指定的话默认就是text/javascript,如果写成别的会导致javascript无法正常使用 var lis = document.getElementsByTagName('li'); //根据标签的名称获取值 for(var i in lis){ //循环一个对象 var item = lis[i]; //取出对象里面的值 item.innerText = i; //innerText 是修改对应key的值 } var lis2 = document.getElementsByClassName('c1'); //根据标签使用的哪一个class获取值 for(var i in lis2){ var item = lis2[i]; item.innerText = i; } var username = document.getElementsByName('username')[0]; //根据标签内置的name获取value var pwd = document.getElementsByName('pwd')[0]; console.log(username.value,pwd.value); //value表示取出对应的值,username.value就是获取到username对应的值,pwd.value就是获取pwd的值
2、内容:
innerText innerHTML var obj = document.getElementById('nid') obj.innerText # 获取文本内容 obj.innerText = "hello" # 替换文本内容 obj.innerHTML # 获取HTML内容 obj.innerHTML = "<h1>asd</h1>" # 替换HTML内容 特殊的: input系列 textarea标签 select标签 value属性操作用户输入和选择的值
通过修改文本内容实现数值自动增加:
<body> <div> <div id="num">1</div> <input type="button" value="+1" onclick="Add();" /> </div> <script type="text/javascript"> function Add() { var nid = document.getElementById('num'); var text = nid.innerText; text = parseInt(text); text += 1; nid.innerText = text; } </script> </body>
获取文本内容:
获取到内部所有标签的文本内容,不包含div,h1等标签:
<div id="n1"> <h1>jack</h1> <h1>XX</h1> </div> <script type="text/javascript"> var text = document.getElementById("n1"); console.log(text.innerText); </script> </body>
结果:
jack
XX
获取包含标签在和文本内容在内的信息:
<body> <div id="n1"> <h1>jack</h1> <h1>XX</h1> </div> <script type="text/javascript"> var text = document.getElementById("n1"); console.log(text.innerHTML); </script> </body>
结果:
<h1>jack</h1> <h1>XX</h1>
特殊性:input、select、textarea:通过value 获取值,不能通过 innerText获取:
<body> <div id="n11">alex <h1>XXX</h1> </div> <h1>特殊的:value</h1> <h3><input type="button" onclick="GetValue();" value="获取值"></h3> <input id = "n22" type="text"> <select id="n33"> <option value="1">上海</option> <option value="2">广州</option> <option value="3">深圳</option> </select> <textarea id="n44">aa</textarea> </body> // 通过id获取到值并进行操作 function GetValue(){ var obj = document.getElementById('n22'); alert(obj.value); obj.value = "2"; //重新赋值 }
做一个搜索框吧:默认显示"请输入要搜索的内容",当鼠标点到搜索框就则不显示,如果搜索框内没有输入任何内容,当鼠标离开时在显示"请输入要搜索的内容"。
<body> <input type="text" id="search" value="请输入要搜索的内容" onfocus="Focus();" onblur="Blur();" /> <script> function Focus(){ var nid = document.getElementById("search"); var value = nid.value; if(value == "请输入要搜索的内容") { nid.value = ""; }else if(value == "请再次输入关键字") { nid.value = ""; } } function Blur(){ var nid = document.getElementById('search'); var value = nid.value; if(!value.trim()){ nid.value = "请输入要搜索的内容"; } } </script> </body>
3、创建标签:
<body> <div id="container"></div> <a href="http://www.baidu.com" onclick="return AddElement();">添加</a> <script> function AddElement(){ /* var nid = document.getElementById('container'); var tag = "<input type = 'text' value='defalut' />"; nid.innerHTML = tag; container.insertAdjacentHTML("beforeBegin",tag); return false; //return false表示其后面的将不再执行 */ var createObj = document.createElement('a'); createObj.href = "http://www.baidu.com"; createObj.innerText = "我的搜索"; //nid.innerHTML = createObj; var nid = document.getElementById('container'); nid.appendChild(createObj); return false; } </script> </body>
4、标签属性及修改:
var obj = document.getElementById('container');
修改固定属性
obj.id
obj.id = "nid"
obj.className
obj.style.fontSize = "yy";
如图:
获取默认属性:
自定义属性
obj.setAttribute(name,value)
obj.getAttribute(name)
obj.removeAttribute(name)
如图:
总结:有的属性是默认属性可以使用obj.key直接获取,对于没有的属性即自定义可以使用obj.setAttribute("key","value")设置,然使用obj.getAttribute("key")可以获取值
5、提交表单
document.geElementById('form').submit()
6、事件
特殊的:
window.onload = function(){}
//jQuery:$(document).ready(function(){})
//onload是所有DOM元素创建、图片加载完毕后才触发的。而ready则是DOM元素创建完毕后触发的,不等图片加载完毕。图片还么有渲染,就可以进行事件的执行。
特殊参数:this,event
7、其他功能
console.log()
alert()
confirm()
// URL和刷新
location.href
location.href = "url" window.location.reload()
// 定时器
setInterval("alert()",2000);
clearInterval(obj)
setTimeout();
clearTimeout(obj)
更改style里里面的属性:
var nid = document.getElementById("n1"); #找到id为n1的属性
nid.style.backgroundColor = "green" #进行操作
如图:
8、提交表单:
不做验证,即不判断用户的输入是否为空:
<body> <form id="forml" action="https://www.sogou.com/web" method="get"> <input name="query" type="text" /> <!-- <input type="submit" value="提交"> /* 方法1,使用submit直接提交 */ --> <div onclick="Submit();">提交</div> </form> <script> function Submit(){ document.getElementById('forml').submit(); #找到id为forml的并将表单给其提交 } </script> </body>
验证用户的输入是否为空:
<body> <form id="forml" action="https://www.sogou.com/web" method="get"> <input name="query" type="text" /> <input type="submit" value="提交" onclick="return MySubmit();" style="background-color: #999999"> </form> <script> function MySubmit(){ var q = document.getElementsByName('query')[0]; if(q.value.trim()){ return true }else { alert('请输入内容') return false } } </script> </body>
注:提交成功后将是搜狗的搜索界面
定时器:
<head> <meta charset="UTF-8"> <title>欢迎光临本网站,您的满意是我们最大的需求!</title> </head> <body> <input type="button" onclick="Stop();" value="停下来吧" > <input type="button" onclick="Start();" value="继续转吧" > <script> //setInterval("操作","间隔时间毫秒") obj1 = setInterval("Func()",1000); //obj2 = setTimeout("Func()",10000); //设置超时时间,即一共转动多少秒 function Stop(){ //清楚定时器 clearInterval(obj1); //clearTimeout(obj2); //调用超时 } function Start(){ obj1 = setInterval("Func()",1000); } function Func(){ var text = document.title; var firstChar = text.charAt(0); var subText = text.substring(1,text.length); var newTitle = subText + firstChar; document.title = newTitle; } </script> </body>
三:jQuery
jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多),对javascript进行了封装,是的更加便捷的开发,并且在兼容性方面十分优秀。
http://www.php100.com/manual/jquery/