循环

111 阅读2分钟

1. 循环结构

1.1 for循环

for循环:

语法:for(var 循环变量=几;循环条件;变量的变化){

循环体

}

特殊:

1、死循环:for(;;){循环体} - 两个分号一个不能少

2、循环变量处其实可以创建多个变量

3、也支持break

1.2 while

语法:

var 循环变量=几;

while(循环条件){

循环体;

循环变量变化一下;

}

2. 数组

2.1、创建数组:2种方式:

1、*直接量方式:
	var arr=[];//空数组
	var arr=[数据,数据,...];

2、构造函数方式:此方法还有一个坑,但是我不说
	var arr=new Array();//空数组
	var arr=new Array(数据,数据,...);

2.2、*访问数组:

1、获取数据
	数组名[下标];

	特殊:1、下标越界,获取到的是一个undefined

2、添加数据
	数组名[下标]=新数据;

	特殊:1、如果下标处已有元素,则为替换
	      2、如果下标越界,会导致你的数组变成一个稀疏数组,中间就会出现很多的undefined,而且下标也不再连续

    结论:数组具有3大不限制:
	1、不限制元素的长度
	2、不限制元素的类型
	3、不限制下标越界 - 但是这个操作并不是好事情,强烈不推荐下标越界

2.3、*数组对象 - 唯一属性

正是因为我们自己数下标容易数错,提供了一个属性:语法:数组名.length - 获取到数组的长度

三个固定套路:
	1、向末尾添加元素:arr[arr.length]=新值
	2、获取倒数第n个元素:arr[arr.length-n];
	3、删除末尾的n个元素:arr.length-=n

2.4、*遍历数组:将数组中的每个元素都取出来 执行 相同 或 相似的操作

 公式:for(var i=0;i<arr.length;i++){
		arr[i];//当前次获取到的元素
       }
           

3. 获取元素

3.1、通过ID:
   语法:var elem=document.getElementById("id值");
   返回:是一个DOM对象/DOM节点/DOM元素,才可以直接做操作
   特殊:
	1、如果id重复了,只会返回第一个
	2、如果没找到,返回的是一个null
	3、此方法白学,以后不准使用

3.2、*通过 标签名:
   语法:var elems=document/parent.getElementsByTagName("标签名");
   返回:是一个DOM集合 - 是一个类数组对象:类似数组,也可以使用下标、length、遍历
   特殊:
	1、一个DOM集合是不允许直接做操作的,除非加下标得到某一个 或 遍历得到所有人,才能做操作
   	2、如果没找到,返回的是一个空集合
	3、此方法不一定非要写document,也可以写一个parent(已经找到的某个父元素)
		如果是写的document,则会找到页面上所有的标签
		而写的是parent,只会找到parent下面的所有的标签

3.3、*通过 class名:
   语法:var elems=document/parent.getElementsByClassName("class名");
   返回:是一个DOM集合 - 是一个类数组对象:类似数组,也可以使用下标、length、遍历
   特殊:
	1、一个DOM集合是不允许直接做操作的,除非加下标得到某一个 或 遍历得到所有人,才能做操作
   	2、如果没找到,返回的是一个空集合
	3、此方法不一定非要写document,也可以写一个parent(已经找到的某个父元素)
		如果是写的document,则会找到页面上所有的标签
		而写的是parent,只会找到parent下面的所有的标签
   3.4、*通过 节点之间的关系 获取元素
前提:至少先要找到一个元素,才能找关系

1、父元素:xx.parentNode - 单个元素
2、子元素:xx.children - 集合
3、第一个儿子:xx.firstElementChild - 单个元素
4、最后一个儿子:xx.lastElementChild - 单个元素
5、前一个兄弟:xx.previousElementSibling - 单个元素
6、后一个兄弟:xx.nextElementSibling - 单个元素

4. 操作元素

4.1、内容:

1、*innerHTML:用于操作双标签,能够识别标签
   获取:elem.innerHTML;
   设置/修改:elem.innerHTML="新内容";

2、innerText:用于操作双标签,不能识别标签
   获取:elem.innerText;
   设置/修改:elem.innerText="新内容";

3、*value:用于操作input
   获取:elem.value;
   设置/修改:elem.value="新内容";

4.2、*属性:

获取属性值:elem.getAttribute("属性名");
设置属性值:elem.setAttribute("属性名","属性值");

简化版:
  获取属性值:elem.属性名;
  设置属性值:elem.属性名="属性值";

  简化版注意:两个小缺点:
	1class必须写为className
	2、只能操作标准属性,不能操作自定义属性

建议:开发中优先使用简化版,简化版实现不了的时候在用复杂版代替

4.3、样式:

内联样式:
	优点:1、优先级最高 - 保证js用户触发一定会生效
	      2、不会牵一发动全身 - 只会操作当前元素
	缺点:1、获取样式时,一定要保证此样式在内联样式中

获取样式:elem.style.css属性名;
设置样式:elem.style.css属性名="css属性值";

特殊:css属性名的写法,如果有横线要去掉横线,变为小驼峰命名法
	原来CSS				JS:
	background-color		backgroundColor
	width				width
	border-top-width		borderTopWidth

4.4、*绑定事件:

为什么不用以前的绑定方式了呢?
	保证HTML和CSS和JS分离

语法:elem.onclick=function(){
		点击后要执行什么代码
		***this关键字:
			单个元素绑定事件,this->这个元素
			多个元素绑定事件,this->当前触发事件的元素
      }