一、任意数求和
任意数求和(执行函数的时候,传递 N 个值实现求和)
/** 任意数求和* 1.传递实参的个数不定* 2.传递的值是否为有效数字不定* 3.把传递的有效数字进行相加求和** arguments:函数内置的实参集合* 1.类数组集合,集合中存储着所有函数执行时,传递的实参信息* 2.不论是否设置形参,arguments 都存在* 3.不论是否传递实参,arguments 也都存在* arguments.callee:存储的是当前函数本身(一般不用的,JS 严格模式下禁止使用这些属性)*/function sum() {let total = null;for (let i = 0; i < arguments.length; i++) {// 获取的每一项的结果都要先转换为数字(数学运算)let item = Number(arguments[i]);// 非有效数字不加if (isNaN(item)) {continue;}total += item;}return total;};let total = sum(10, 20, 30, 40);
二、动态操作dom
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>操作DOM</title><style>.RED {color: red;background: lightblue;}.box {margin-top: 10px;width: 100px;height: 100px;background-color: lightblue;}.box span {color: red;font-size: 18px;}</style></head><body><!-- <div id="haha">哈哈</div> --><div class="box"><span>珠峰1</span></div><script>let box1 = document.querySelector('.box');// 克隆第一份(深克隆)let box2 = box1.cloneNode(true);box2.querySelector('span').innerText = '珠峰2';// 克隆第二份(浅克隆)let box3 = box1.cloneNode(false);box3.innerHTML = "<span>珠峰3</span>";document.body.appendChild(box2);document.body.appendChild(box3);//===========// 容器.removeChild(元素)document.body.removeChild(box2);</script><script>// 动态创建一个DIV元素对象,把其赋给BOXlet box = document.createElement('div');box.id = 'boxActive';box.style.width = '200px';box.style.height = '200px';box.className = 'RED';// 动态创建一个文本let text = document.createTextNode('珠峰');// 添加:容器.appendChild(元素)box.appendChild(text);// document.body.appendChild(box);// 放到指定元素前:容器.insertBefore([新增元素],[指定元素])let haha = document.getElementById('haha');// haha.parentNode.insertBefore(...)document.body.insertBefore(box, haha);</script></body></html>
三、DOM对象及其基础操作
DOM:document object model 文档对象模型,提供一些属性和方法供我们操作页面中的元素
获取DOM元素的方法
document.getElementById() 指定在文档中,基于元素的 ID 或者这个元素对象
[context].getElementsByTagName() 在指定上下文(容器)中,通过标签名获取一组元素集合
[context].getElementsByClassName() 在指定上下文中,通过样式类名获取一组元素集合 (不兼容IE6~8)
document.getElementsByName() 在整个文档中,通过标签的 NAME 属性值获取一组节点集合 (在 IE 中只有表单元素的 NAME 才能识别,所以我们一般只应用于表单元素的处理)
document.head / document.body / document.documentElement 获取页面中的 HEAD / BODY / HTML 三个元素
[context].querySelector([selector]) 在指定上下文中,通过选择器获取到指定的元素对象
[context].querySelectorAll([selector]) 在指定上下文中,通过选择器获取到指定的元素集合
// querySelector / querySelectorAll 不兼容 IE6~8let box = document.querySelector('#box');let links = box.querySelectorAll('a');// links=document.querySelectorAll('#box a');let aas=document.querySelectorAll('.aa');
四、节点
JS中的节点和描述节点之间关系的属性
节点 : Node (页面中所有的东西都是节点) 节点集合:NodeList (getElementsByName / querySelectorAll 获取的都是节点集合)
- 元素节点 (元素标签)
- nodeType:1
- nodeName : 大写的标签名
- nodeValue :null
- 文本节点
- nodeType:3
- nodeName : ‘#text’
- nodeValue :文本内容
- 注释节点
- nodeType:8
- nodeName : ‘#commen’
- nodeValue :注释内容
- 文档节点 document
- nodeType:9
- nodeName : ‘#document’
- nodeValue :null
- ……
描述这些节点之家关系的属性
- childNodes :获取所有的子节点
- children:获取所有的元素子节点(子元素标签集合)
- parent:获取父亲节点
- firstChild:获取第一个子节点
- lastChild:获取最后一个子节点
- firstElementChild / lastElementChild :获取第一个和最后一个元素子节点 (不兼容IE6~8)
- previousSibling:获取上一个哥哥节点
- nextSibling:获取下一个弟弟节点
- previousElementSibling / nextElementSibling :获取哥哥和弟弟元素节点(不兼容IE6~8)
- ……
五、变量名和属性名的区别
var name = 10;var obj = {name:'sufy',0:100};
- 获取 OBJ 这个对象的 NAME 属性对应的值
- 一个对象的属性名只有两种格式:数字或者字符串(等基本类型值)
- 对象.属性名 / 对象 [‘key’]
属性名:属性值(放的是变量也是把变量存储的值拿来做属性值)
ES6新语法:name:name ,当属性名和属性值一样时可以用 name, 简写 当数字作为属性名的时候不能直接点
// for in 循环:用来循环遍历对象中的键值对的(continue 和 break 同样适用)var obj = {name: '春亮',age: 52,friends: '王鹏,志刚',3: 140,1: 20,2: 149,};// for(var 变量(key) in 对象)// 对象中有多少组键值对,循环就执行几次(除非 break 结束)for (var key in obj) {// 每一次循环 key 变量存储的值:当前对象的属性名// 获取属性值:obj[属性名] => obj[key] obj.key/obj['key']console.log('属性名:' + key + ' 属性值:' + obj[key]);}// for in 在遍历的时候,优先循环数字属性名(从小到大)
