# 1、根据document对象查询
document是JS内置的一个对象,表示整个HTML文档。根据document查询,意思就是在整个文档范围内查询。
* 单词:
get -- 获取、得到
Element -- 元素
Elements -- 很多元素
By… -- 根据…./通过….
Class -- 类
Tag -- 标签
query -- 查询
Selector -- 选择器
* 练习:
getElementById() -- 根据元素的id值获取一个元素类型的节点 返回值是一个dom对象
getElementsByTagName() -- 通过标签名获取很多个元素类型的节点 返回一个包含很多dom对象的数组
具体查询方法见下表
![](https://img.kancloud.cn/a6/cc/a6cc58ba92ed6528b2b8866a11b08d89_812x424.png)
演示的HTML:
```
<ul>
<li class="a">李清照</li>
<li id="tangwei">汤唯</li>
<li class="a">唐婉</li>
<li>王昭君</li>
</ul>
<p class="a">上述内容是美女型诗人。</p>
<br>
```
```
请输入更多诗人: <input type="text" name="shiren" />
查询的JS代码:
/****************** script标签一定要放到ul/p/input标签下面 *******************/
//------------------------根据id查询
var tangwei = document.getElementById('tangwei');
//console.log(tangwei);
//tangwei.style.样式名称 = 值; 给标签添加样式
tangwei.style.color = 'red';
//-----------------------根据标签名查询
var lis = document.getElementsByTagName('li'); // 返回数组,数组中包含满足条件的4个li
//console.log(lis);
for(var i=0; i<lis.length; i++){
lis[i].style.backgroundColor = '#ccffcc';
}
//---------------------根据元素的类名查询
var as = document.getElementsByClassName('a'); // 返回数组,数组中包含类名为a的元素
for(var i=0; i<as.length; i++){
as[i].style.fontSize = '30px';
}
//---------------------根据元素的name属性查询
var input = document.getElementsByName('shiren'); // 返回数组,数组中包含属性name为shiren的元素
input[0].style.backgroundColor = '#ccc';
//--------------------根据css选择器选择元素
//document.querySelector('css选择器');
var liqingzhao = document.querySelector('.a'); // 返回一个dom对象,class为a的有很多,也只返回第一个
liqingzhao.style.border = 'solid 1px pink';
var all = document.querySelectorAll('p, input'); //返回数组
for(var i in all){
all[i].style.border = 'dashed 1px blue';
}
```
最终效果:
![](https://img.kancloud.cn/ef/3d/ef3de830d0d4bc2f6726d10b5fb1cb4e_733x337.png)
# 2、相互关系查询
* 相互关系查询可以分为下面三种情况:
根据父节点查找子节点
根据子节点查父节点
查询兄弟节点
* 单词:
child -- 孩子
children -- 很多孩子
Node -- 节点
nodes -- 很多节点
first -- 第一个
last -- 最后一个
Element -- 元素
Sibling -- 兄弟,姐妹
Siblings -- 所有的兄弟,姐妹
previous -- 上一个
next -- 下一个
具体属性/方法见下表:
![](https://img.kancloud.cn/92/de/92de9530b311548b2f08a8a852d50e70_808x795.png)
演示的HTML代码:
```
<ul id="u">
<li>泽拉斯</li>
<li>蚂蚱</li>
<li>拉克丝</li>
<li>安妮</li>
<li>维克托</li>
</ul>
测试的JS代码:
/******************* 根据父节点查找子节点 ************************/
//先找到父节点
//var ul = document.getElementsByTagName('ul')[0];
//var ul = document.getElementById('u');
var ul = document.querySelector('#u');
// ------------- 查询所有ul的子节点 -- children
//var lis = ul.children; // 返回数组。 查询ul的所有子节点
//console.log(lis);
// ------------- 查询所有ul的子节点 -- childNodes
//var lis = ul.childNodes; //
//console.log(lis);
//---------------查询所有ul的子节点 ---
//var lis = ul.getElementsByTagName('li'); //在ul中查找所有ul后代中的li
//console.log(lis);
//---------------查询ul的第一个子节点 --- firstChild
//var li1 = ul.firstChild;
//console.log(li1); //不好用,会把第一个空白当做第一个子元素
//---------------查询ul的第一个子节点 --- firstElementChild
//var li1 = ul.firstElementChild;
//console.log(li1); //好用,但是IE8+才支持
//---------------查询ul的最后一个子节点 --- lastChild
//---------------查询ul的最后一个子节点 --- lastElementChild
/******************* 根据子点查找父节点 ************************/
//随便找一个子节点
//var mazha = document.getElementsByTagName('li')[1];
//var ul2 = mazha.parentNode;
//console.log(ul2);
/******************* 兄弟关系查询 ************************/
//随便找一个子节点
var mazha = document.getElementsByTagName('li')[1];
//查询上一个兄弟
//var zelasi = mazha.previousSibling;
//console.log(zelasi); //不好使,会认为空白是上一个兄弟
//var zelasi = mazha.previousElementSibling;
//console.log(zelasi); //好使,但是IE8+支持
//查询下一个兄弟 -- nextSibling
//查询下一个兄弟 -- nextElementSibling
```
效果:打开注释,依次查看即可。
# 3、遗留DOM
早期DOM访问形式,在一些特定元素的获取上比较方便。被保留下来使用,W3C标准化之后 称为“0级DOM”。
![](https://img.kancloud.cn/d3/13/d31370a2811ea5ba230ef09b8706039b_814x427.png)
HTML代码:
```
<form name="f1">
用户名:<input type="text" name="username" value="123"><br>
密码:<input type="password" name="pwd" value="123">
</form>
<form name="f2">
邮箱:<input type="text" name="email" value="123"><br>
电话:<input type="password" name="tel" value="123">
</form>
```
JS代码:
```
//获取body节点
var body = document.body;
body.style.backgroundColor = '#ccc';
//获取form
document.forms[1].style.border = 'solid 1px red';
//获取form,通过name值
document.f1.style.border = 'solid 1px blue';
//找表单中各个项
document.f1.username.style.backgroundColor = 'yellow';
```
效果:
![](https://img.kancloud.cn/43/54/435423b2e0f73f158b1f9146932559e8_570x153.png)
- 第一天
- 一、学习目标
- 二、关于JavaScript
- 三、JS语法基础
- 四、变量
- 五、常量
- 六、运算符
- 七、数组
- 八、对象
- 九、数据类型
- 第二天
- 一、昨日复习
- 二、今日目标
- 三、数据类型转换
- 四、流程控制
- 五、函数基础
- 六、作用域
- 七、标准库(内置对象)
- 八、总结
- 第三天
- 一、昨日复习
- 二、今日目标
- 三、DOM介绍
- 四、元素(标签)节点查询操作
- 五、元素(标签)节点增删改操作
- 六、设置/获取元素的css样式
- 七、事件和事件对象
- 八、键盘keyCode对照表
- 第四天
- 一、昨日复习
- 二、今日目标
- 三、DOM之属性节点操作
- 四、DOM对象的通用属性
- 五、DOM获取元素的位置
- 六、事件绑定与移除
- 七、事件对象相关属性和方法使用
- 八、案例--可编辑的表格
- 第五天
- 一、今日目标
- 二、执行流程
- 三、定时器
- 四、闭包
- 五、案例
- 第六天
- 一、昨日回顾
- 二、今日目标
- 三、正则表达式概述
- 四、入门案例
- 五、正则语法
- 六、分组/捕获和反向引用
- 七、匹配中文(utf-8编码)
- 八、环视(断言/零宽断言/正向预测/负向预测)
- 九、正则对象的属性和方法
- 十、支持正则表达式的 String 对象的方法
- 十一、案例
- 十二、PHP中的正则表达式
- 第七天
- 一、昨日回顾
- 二、正则案例
- 三、PHP中的正则表达式
- 四、正则练习
- 五、仿淘宝评分小星星
- 六、标签页效果
- 七、横向下拉菜单
- 第八天
- 一、今日目标
- 二、面向对象编程
- 三、定义对象
- 四、对象相关操作
- 五、对象在内存中的存在形式
- 六、原型对象(关键)
- 七、定义对象进阶
- 八、函数进阶
- 第九天
- 一、昨日回顾
- 二、今日目标
- 三、Object
- 四、继承
- 五、this指向总结
- 六、案例(贪吃蛇)
- 第十天
- 一、今日目标
- 二、Ajax概述
- 三、工作原理
- 四、XMLHttpRequest对象介绍
- 五、使用Ajax的步骤
- 六、细节问题
- 七、JSON
- 八、Ajax中,服务器返回json格式的数据
- 九、案例--省市县三级联动
- 第十一天
- 一、昨日回顾
- 二、今日目标
- 三、完成省市县三级联动
- 四、优化省市县三级联动
- 五、服务器返回XML格式的数据
- 六、FormData对象
- 七、跨域请求
- 八、实现跨域请求
- 第十二天
- 一、Ajax回顾
- 二、今日目标
- 三、jQuery概述
- 四、快速入门
- 五、可编辑的表格
- 六、纵向导航菜单
- 七、横向导航菜单
- 八、标签页效果
- 第十三天
- 一、学习目标
- 二、杂项
- 三、jQuery中的事件
- 四、jQuery封装的Ajax
- 五、案例 -- 无刷新的分页
- 第十四天
- 一、昨日回顾
- 二、效果
- 三、跨域请求
- 四、文档操作
- 五、插件编写
- 六、自定义插件
- 七、第三方插件