一、任意数求和
任意数求和(执行函数的时候,传递 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元素对象,把其赋给BOX
let 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~8
let 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 在遍历的时候,优先循环数字属性名(从小到大)