Python自动化 【第十五篇】:CSS、JavaScript 和 Dom介绍

本节内容

  • CSS
  • javascript
  • dom

CSS

position标签

  • fixed: 固定在页面的某个位置
  • relative + absolute: 相对定位

opacity:0.5 设置透明度

z-index:数值大的在上边

overflow: hidden 超过div的宽度后隐藏 auto 出现滚动条

hover: 当鼠标移动到当前标签上时才生效

background-image:url(‘1.jpg’)  #默认 div大,图片水平放置

background-repeat:no-repeat  #不重复堆叠 repeat-x:水平堆叠  repeat-y:垂直放

background-position-x:默认是0

background-position-y:默认是0

或者background-position:10px 10px

或者background里直接把所有参数值都写上,如下图:

JavaScript

JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理。

一、如何编写

1、JavaScript代码存在形式

1 <!-- 方式一 -->
2 <script type"text/javascript" src="JS文件"></script>
3
4 <!-- 方式二 -->
5 <script type"text/javascript">
6 Js代码内容
7 </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>

二、变量

JavaScript中变量的声明是一个非常容易出错的点,局部变量必须一个 var 开头,如果未使用var,则默认表示声明的是全局变量。

 1 <script type="text/javascript">
2
3 // 全局变量
4 name = 'seven';
5
6 function func(){
7 // 局部变量
8 var age = 18;
9
10 // 全局变量
11 gender = "男"
12 }
13 </script>

JavaScript中代码注释:

    • 单行 //
    • 多行 /*  */

注意:此注释仅在Script块中生效。

三、数据类型

JavaScript 中的数据类型分为原始类型和对象类型:

    • 原始类型

      • 数字
      • 字符串
      • 布尔值
    • 对象类型
      • 数组
      • “字典”
      • ...

特别的,数字、布尔值、null、undefined、字符串是不可变。

// null、undefined
null是JavaScript语言的关键字,它表示一个特殊值,常用来描述“空值”。
undefined是一个特殊值,表示变量未定义。

1、数字(Number)

JavaScript中不区分整数值和浮点数值,JavaScript中所有数字均用浮点数值表示。

转换:

    • parseInt(..)    将某值转换成数字,不成功则NaN
    • parseFloat(..) 将某值转换成浮点数,不成功则NaN

特殊值:

    • NaN,非数字。可使用 isNaN(num) 来判断。
    • Infinity,无穷大。可使用 isFinite(num) 来判断。

更多数值计算:

常量

Math.E
常量e,自然对数的底数。 Math.LN10
10的自然对数。 Math.LN2
2的自然对数。 Math.LOG10E
以10为底的e的对数。 Math.LOG2E
以2为底的e的对数。 Math.PI
常量figs/U03C0.gif。 Math.SQRT1_2
2的平方根除以1。 Math.SQRT2
2的平方根。 静态函数 Math.abs( )
计算绝对值。 Math.acos( )
计算反余弦值。 Math.asin( )
计算反正弦值。 Math.atan( )
计算反正切值。 Math.atan2( )
计算从X轴到一个点的角度。 Math.ceil( )
对一个数上舍入。 Math.cos( )
计算余弦值。 Math.exp( )
计算e的指数。 Math.floor( )
对一个数下舍人。 Math.log( )
计算自然对数。 Math.max( )
返回两个数中较大的一个。 Math.min( )
返回两个数中较小的一个。 Math.pow( )
计算xy。 Math.random( )
计算一个随机数。 Math.round( )
舍入为最接近的整数。 Math.sin( )
计算正弦值。 Math.sqrt( )
计算平方根。 Math.tan( )
计算正切值。 Math

2、字符串(String)

字符串是由字符组成的数组,但在JavaScript中字符串是不可变的:可以访问字符串任意位置的文本,但是JavaScript并未提供修改已知字符串内容的方法。

常见功能:

 1 obj.length                           长度
2
3 obj.trim() 移除空白
4 obj.trimLeft()
5 obj.trimRight)
6 obj.charAt(n) 返回字符串中的第n个字符
7 obj.concat(value, ...) 拼接
8 obj.indexOf(substring,start) 子序列位置
9 obj.lastIndexOf(substring,start) 子序列位置
10 obj.substring(from, to) 根据索引获取子序列
11 obj.slice(start, end) 切片
12 obj.toLowerCase() 大写
13 obj.toUpperCase() 小写
14 obj.split(delimiter, limit) 分割
15 obj.search(regexp) 从头开始匹配,返回匹配成功的第一个位置(g无效)
16 obj.match(regexp) 全局搜索,如果正则中有g表示找到全部,否则只找到第一个。
17 obj.replace(regexp, replacement) 替换,正则中有g则替换所有,否则只替换第一个匹配项,
18 $数字:匹配的第n个组内容;
19 $&:当前匹配的内容;
20 $`:位于匹配子串左侧的文本;
21 $':位于匹配子串右侧的文本
22 $$:直接量$符号

3、布尔类型(Boolean)

布尔类型仅包含真假,与Python不同的是其首字母小写。

    • ==      比较值相等
    • !=       不等于
    • ===   比较值和类型相等
    • !===  不等于
    • ||        或
    • &&      且

4、数组

JavaScript中的数组类似于Python中的列表

常见功能:

 1 obj.length          数组的大小
2
3 obj.push(ele) 尾部追加元素
4 obj.pop() 尾部获取一个元素
5 obj.unshift(ele) 头部插入元素
6 obj.shift() 头部移除元素
7 obj.splice(start, deleteCount, value, ...) 插入、删除或替换数组的元素
8 obj.splice(n,0,val) 指定位置插入元素
9 obj.splice(n,1,val) 指定位置替换元素
10 obj.splice(n,1) 指定位置删除元素
11 obj.slice( ) 切片
12 obj.reverse( ) 反转
13 obj.join(sep) 将数组元素连接起来以构建一个字符串
14 obj.concat(val,..) 连接数组
15 obj.sort( ) 对数组元素进行排序

四、其他

1、序列化

    • JSON.stringify(obj)   序列化
    • JSON.parse(str)        反序列化

2、转义

    • decodeURI( )                   URl中未转义的字符
    • decodeURIComponent( )   URI组件中的未转义字符
    • encodeURI( )                   URI中的转义字符
    • encodeURIComponent( )   转义URI组件中的字符
    • escape( )                         对字符串转义
    • unescape( )                     给转义字符串解码
    • URIError                         由URl的编码和解码方法抛出

3、eval

JavaScript中的eval是Python中eval和exec的合集,既可以编译代码也可以获取返回值。

    • eval()
    • EvalError   执行字符串中的JavaScript代码

4、正则表达式

1、定义正则表达式

    • /.../  用于定义正则表达式
    • /.../g 表示全局匹配
    • /.../i 表示不区分大小写
    • /.../m 表示多行匹配
      JS正则匹配时本身就是支持多行,此处多行匹配只是影响正则表达式^和$,m模式也会使用^$来匹配换行的内容)
1 var pattern = /^Java\w*/gm;
2 var text = "JavaScript is more fun than \nJavaEE or JavaBeans!";
3 result = pattern.exec(text)
4 result = pattern.exec(text)
5 result = pattern.exec(text)

注:定义正则表达式也可以  reg= new RegExp()

2、匹配

JavaScript中支持正则表达式,其主要提供了两个功能:

    • test(string)     检查字符串中是否和正则匹配
  

n = 'uui99sdf'
reg = /\d+/
reg.test(n) ---> true # 只要正则在字符串中存在就匹配,如果想要开头和结尾匹配的话,就需要在正则前后加 ^和$
    • exec(string)    获取正则表达式匹配的内容,如果未匹配,值为null,否则,获取匹配成功的数组。 
  

获取正则表达式匹配的内容,如果未匹配,值为null,否则,获取匹配成功的数组。

非全局模式
获取匹配结果数组,注意:第一个元素是第一个匹配的结果,后面元素是正则子匹配(正则内容分组匹配)
var pattern = /\bJava\w*\b/;
var text = "JavaScript is more fun than Java or JavaBeans!";
result = pattern.exec(text) var pattern = /\b(Java)\w*\b/;
var text = "JavaScript is more fun than Java or JavaBeans!";
result = pattern.exec(text) 全局模式
需要反复调用exec方法,来一个一个获取结果,直到匹配获取结果为null表示获取完毕
var pattern = /\bJava\w*\b/g;
var text = "JavaScript is more fun than Java or JavaBeans!";
result = pattern.exec(text) var pattern = /\b(Java)\w*\b/g;
var text = "JavaScript is more fun than Java or JavaBeans!";
result = pattern.exec(text)

3、字符串中相关方法

  

obj.search(regexp)                   获取索引位置,搜索整个字符串,返回匹配成功的第一个位置(g模式无效)
obj.match(regexp) 获取匹配内容,搜索整个字符串,获取找到第一个匹配内容,如果正则是g模式找到全部
obj.replace(regexp, replacement) 替换匹配替换,正则中有g则替换所有,否则只替换第一个匹配项,
$数字:匹配的第n个组内容;
$&:当前匹配的内容;
$`:位于匹配子串左侧的文本;
$':位于匹配子串右侧的文本
$$:直接量$符号

  

5、时间处理

JavaScript中提供了时间相关的操作,时间操作中分为两种时间:

    • 时间统一时间
    • 本地时间(东8区)

更多操作参见:http://www.shouce.ren/api/javascript/main.html

五、语句和异常

1、条件语句

JavaScript中支持两个中条件语句,分别是:if 和 switch

    if(条件){

    }else if(条件){

    }else{

    }

if

   switch(name){
case '1':
age = 123;
break;
case '2':
age = 456;
break;
default :
age = 777;
}

switch

2、循环语句

JavaScript中支持三种循环语句,分别是:

var names = ["alex", "tony", "rain"];

for(var i=0;i<names.length;i++){
console.log(i);
console.log(names[i]);
}

方式一

var names = ["alex", "tony", "rain"];

for(var index in names){
console.log(index);
console.log(names[index]);
}

方式二

方式三

3、异常处理

 1 try {
2 //这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
3 }
4 catch (e) {
5 // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
6 //e是一个局部变量,用来指向Error对象或者其他抛出的对象
7 }
8 finally {
9 //无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
10 }

注:主动跑出异常 throw Error('xxxx')

六、函数

1、基本函数

JavaScript中函数基本上可以分为一下三类:

 1 // 普通函数
2 function func(arg){
3 return true;
4 }
5
6 // 匿名函数
7 var func = function(arg){
8 return "tony";
9 }
10
11 // 自执行函数
12 (function(arg){
13 console.log(arg);
14 })('123')

注意:对于JavaScript中函数参数,实际参数的个数可能小于形式参数的个数,函数内的特殊值arguments中封装了所有实际参数。

2、作用域

JavaScript中每个函数都有自己的作用域,当出现函数嵌套时,就出现了作用域链。当内层函数使用变量时,会根据作用域链从内到外一层层的循环,如果不存在,则异常。

切记:所有的作用域在创建函数且未执行时候就已经存在。

 1 function f2(){
2 var arg= 111;
3 function f3(){
4 console.log(arg);
5 }
6
7 return f3;
8 }
9
10 ret = f2();
11 ret();
 

注:声明提前,在JavaScript引擎“预编译”时进行。

更多:http://www.cnblogs.com/wupeiqi/p/5649402.html

3、闭包

闭包是指可以包含自由(未绑定到特定对象)变量的代码块。

「闭包」,是指拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

闭包是个函数,而它「记住了周围发生了什么」。表现为由「一个函数」体中定义了「另个函数」

由于作用域链只能从内向外找,默认外部无法获取函数内部变量。闭包,在外部获取函数内部的变量。

 1 function f2(){
2 var arg= [11,22];
3 function f3(){
4 return arg;
5 }
6 return f3;
7 }
8
9 ret = f2();
10 ret();

4、面向对象

 1 function Foo (name,age) {
2 this.Name = name;
3 this.Age = age;
4 this.Func = function(arg){
5 return this.Name + arg;
6 }
7 }
8
9 var obj = new Foo('alex', 18);
10 var ret = obj.Func("sb");
11 console.log(ret);

对于上述代码需要注意:

    • Foo充当的构造函数
    • this代指对象
    • 创建对象时需要使用 new

上述代码中每个对象中均保存了一个相同的Func函数,从而浪费内存。使用原型和可以解决该问题:

 1 function Foo (name,age) {
2 this.Name = name;
3 this.Age = age;
4 }
5 Foo.prototype = {
6 GetInfo: function(){
7 return this.Name + this.Age
8 },
9 Func : function(arg){
10 return this.Name + arg;
11 }

DOM

文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口。它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。我们最为关心的是,DOM把网页和脚本以及其他的编程语言联系了起来。DOM属于浏览器,而不是JavaScript语言规范里的规定的核心内容。

一、查找元素

1、直接查找

document.getElementById             根据ID获取一个标签
document.getElementsByName 根据name属性获取标签集合
document.getElementsByClassName 根据class属性获取标签集合
document.getElementsByTagName 根据标签名获取标签集合

2、间接查找

parentNode          // 父节点
childNodes // 所有子节点
firstChild // 第一个子节点
lastChild // 最后一个子节点
nextSibling // 下一个兄弟节点
previousSibling // 上一个兄弟节点 parentElement // 父节点标签元素
children // 所有子标签
firstElementChild // 第一个子标签元素
lastElementChild // 最后一个子标签元素
nextElementtSibling // 下一个兄弟标签元素
previousElementSibling // 上一个兄弟标签元素

二、操作

1、内容

innerText   文本
outerText
innerHTML HTML内容
innerHTML
value 值

2、属性

attributes                // 获取所有标签属性
setAttribute(key,value) // 设置标签属性
getAttribute(key) // 获取指定标签属性 /*
var atr = document.createAttribute("class");
atr.nodeValue="democlass";
document.getElementById('n1').setAttributeNode(atr);
*/
 1 <!DOCTYPE html>
2 <html>
3 <head lang="en">
4 <meta charset="UTF-8">
5 <title></title>
6 </head>
7 <body>
8 <input type="button" value="全选" onclick="CheckAll();"/>
9 <input type="button" value="取消" onclick="CancelAll();"/>
10 <input type="button" value="反选" onclick="ReverseCheck();"/>
11
12 <table border="1" >
13 <thead>
14
15 </thead>
16 <tbody id="tb">
17 <tr>
18 <td><input type="checkbox" /></td>
19 <td>111</td>
20 <td>222</td>
21 </tr>
22 <tr>
23 <td><input type="checkbox" /></td>
24 <td>111</td>
25 <td>222</td>
26 </tr>
27 <tr>
28 <td><input type="checkbox" /></td>
29 <td>111</td>
30 <td>222</td>
31 </tr>
32 <tr>
33 <td><input type="checkbox" /></td>
34 <td>111</td>
35 <td>222</td>
36 </tr>
37 </tbody>
38 </table>
39 <script>
40 function CheckAll(ths){
41 var tb = document.getElementById('tb');
42 var trs = tb.childNodes;
43 for(var i =0; i<trs.length; i++){
44
45 var current_tr = trs[i];
46 if(current_tr.nodeType==1){
47 var inp = current_tr.firstElementChild.getElementsByTagName('input')[0];
48 inp.checked = true;
49 }
50 }
51 }
52
53 function CancelAll(ths){
54 var tb = document.getElementById('tb');
55 var trs = tb.childNodes;
56 for(var i =0; i<trs.length; i++){
57
58 var current_tr = trs[i];
59 if(current_tr.nodeType==1){
60 var inp = current_tr.firstElementChild.getElementsByTagName('input')[0];
61 inp.checked = false;
62 }
63 }
64 }
65
66 function ReverseCheck(ths){
67 var tb = document.getElementById('tb');
68 var trs = tb.childNodes;
69 for(var i =0; i<trs.length; i++){
70 var current_tr = trs[i];
71 if(current_tr.nodeType==1){
72 var inp = current_tr.firstElementChild.getElementsByTagName('input')[0];
73 if(inp.checked){
74 inp.checked = false;
75 }else{
76 inp.checked = true;
77 }
78 }
79 }
80 }
81
82 </script>
83 </body>
84 </html>

3、class操作

className                // 获取所有类名
classList.remove(cls) // 删除指定类
classList.add(cls) // 添加类

4、标签操作

a.创建标签

// 方式一
var tag = document.createElement('a')
tag.innerText = "wupeiqi"
tag.className = "c1"
tag.href = "http://www.cnblogs.com/wupeiqi" // 方式二
var tag = "<a class='c1' href='http://www.cnblogs.com/wupeiqi'>wupeiqi</a>"

b.操作标签

// 方式一
var obj = "<input type='text' />";
xxx.insertAdjacentHTML("beforeEnd",obj);
xxx.insertAdjacentElement('afterBegin',document.createElement('p')) //注意:第一个参数只能是'beforeBegin'、 'afterBegin'、 'beforeEnd'、 'afterEnd' // 方式二
var tag = document.createElement('a')
xxx.appendChild(tag)
xxx.insertBefore(tag,xxx[1])

实例:

<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<title></title> <style>
.gray{
color:gray;
}
.black{
color:black;
}
</style>
<script type="text/javascript">
function Enter(){
var id= document.getElementById("tip")
id.className = 'black';
if(id.value=='请输入关键字'||id.value.trim()==''){
id.value = ''
}
}
function Leave(){
var id= document.getElementById("tip")
var val = id.value;
if(val.length==0||id.value.trim()==''){
id.value = '请输入关键字'
id.className = 'gray';
}else{
id.className = 'black';
}
}
</script>
</head>
<body>
<input type='text' class='gray' id='tip' value='请输入关键字' onfocus='Enter();' onblur='Leave();'/>
</body>
</html>

搜索框

跑马灯

python自动华 (十五)的更多相关文章

  1. python自动华 (五)

    Python自动化 [第五篇]:Python基础-常用模块 目录 模块介绍 time和datetime模块 random os sys shutil json和pickle shelve xml处理 ...

  2. 孤荷凌寒自学python第八十五天配置selenium并进行模拟浏览器操作1

    孤荷凌寒自学python第八十五天配置selenium并进行模拟浏览器操作1 (完整学习过程屏幕记录视频地址在文末) 要模拟进行浏览器操作,只用requests是不行的,因此今天了解到有专门的解决方案 ...

  3. 孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备

     孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天本来应当继续学习Python的数据库操作,但根据过去我自 ...

  4. Python进阶(三十五)-Fiddler命令行和HTTP断点调试

    Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令   上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的se ...

  5. 孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5

    孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 直接上代码.详细过程见文末屏幕录像 ...

  6. 孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4

    孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十一天. 今天继续学习mongoDB的简单操作 ...

  7. 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容

     孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...

  8. 进击的Python【第十五章】:Web前端基础之DOM

    进击的Python[第十五章]:Web前端基础之DOM 简介:文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示 ...

  9. python自动华 (十六)

    Python自动化 [第十六篇]:JavaScript作用域和Dom收尾 本节内容: javascript作用域 DOM收尾 JavaScript作用域 JavaScript的作用域一直以来是前端开发 ...

随机推荐

  1. 【LOJ】#2137. 「ZJOI2015」诸神眷顾的幻想乡

    我居然到了国赛之前才学习怎么做广义后缀自动机 这个题目--意思是--有20个叶子,肯定一条路径都是任意一个叶子为根,一个从某个点往祖先走的路径 这样的话我们可以按照dfs序,从每个节点的父亲那里的后缀 ...

  2. Python 基础教程 | 菜鸟教程

    https://www.runoob.com/python/python-install.html

  3. Django——关于项目开发遇到的一些小技巧

    目录 头像图片 js获取网站信息 js获取前端信息 Dj获取刚写入的数据的信息 js跳转新链接 头像图片对象的显示 在做到根据登陆ID决定用户头像的时候,加载静态文件的{% static ‘xxxxx ...

  4. elasticsearch 集群详解

    ES为什么要实现集群 在单台ES服务器节点上,随着业务量的发展索引文件慢慢增多,会影响到效率和内存存储问题等. 如果使用ES集群,会将单台服务器节点的索引文件使用分片技术,分布式的存放在多个不同的物理 ...

  5. 面试经典算法:优先队列,最大堆,堆排序,左偏树Golang实现

    堆排序 使用优先队列-最小/最大堆可实现. 优先队列 优先队列是一种能完成以下任务的队列:插入一个数值,取出最小的数值(获取数值,并且删除).优先队列可以用二叉树来实现,我们称这种为二叉堆. 最小堆 ...

  6. mybaits实现oracle批量新增数据,回填主键

    项目有需求,百度了很久,反正他们说的方法,我都没成功,我也不知道是不是我写代码的姿势不正确,没办法只能自己想法子了 我们这个项目用到了通过Mapper,通用Mapper里通过OracleProvide ...

  7. windows环境下 快速杀死占用端口的进程

    保存为bat脚本,设置需要解除占用的端口 port,点击运行即可 @echo off setlocal enabledelayedexpansion set prot = 8022 for /f &q ...

  8. 博客自定义1-皮肤模板 基于SimpleMemory 添加到顶部小按钮

    周五公司事不是很紧,打算好好弄下自己的博客,这是自己学习和记录分享地方, 首先请记得申请js权限,默认不支持的,博主是已经申请通过后的样子 接着先选择cnblogs一个现有的模板,我这个就是在他的模板 ...

  9. Css制作table细线表格

    制作细线表格,我想应该是最基本的css知识了,记录下来巩固下. 推荐: table{ border-collapse:collapse; border: 1px solid #000000; } td ...

  10. 注解@Slf4j使用

    我们在写代码的时候需要加入日志打印,如果不想每次都写private  final Logger logger = LoggerFactory.getLogger(XXX.class); 那么可以用注解 ...