DOM-查找和修改
1. 查找:
按HTML查找:
问题: 每次只能按一个条件查找,如果查找条件复杂,则步骤很繁琐
解决: 选择器:
按选择器查找: 2个API
1. 只查找一个元素:
var elem=parent.querySelector("选择器");
2. 查找多个元素;
var elems=parent.querySelectorAll("选择器");
强调: 可在任意父元素上调用
返回非动态集合: 实际存储属性值,即使反复访问集合,也不会反复查找DOM树
优: 不会反复查找DOM树
缺: 首次查找速度慢
兼容性受制于浏览器的要求
鄙视: 按HTML查找 vs 按选择器查找
1. 返回值: 按HTML查找,返回动态集合
按选择器查找,返回非动态集合
2. 首次查找效率: 按HTML查找,快
按选择器查找,慢
3. 易用性: 按HTML查找, 繁琐
按选择器查找, 简洁
总结: 如果只靠一个条件,就可找到想要的元素时,首选按HTML查找。
如果查找条件复杂时,首选按选择器查找
2. 修改: 3种:
内容: 3种:
1. 开始标签到结束标签之间的原始HTML代码片段
.innerHTML
2. 开始标签到结束标签之间的纯文本正文
.textContent IE8: .innerText
多做2件事: 1. 去掉所有内嵌标签;
2. 转义字符翻译为正文;
3. 表单元素的内容/值: .value
属性: 3种:
1. HTML标准属性: HTML标准中规定的字符串类型的属性
2种:
1. 核心DOM API:
获取一个属性节点: 所有属性节点都保存在元素的attribute集合中
var attr_node=elem.attributes[i/属性名]
var value=attr_node.nodeValue;
获取属性值:
elem.getAttribute("属性名")
修改属性值:
elem.setAttribute("属性名","属性值")
判断是否包含属性:
elem.hasAttribute("属性名")
移除属性: elem.removeAttribute("属性名")
特点: 优: 万能
缺: 繁琐
2. HTML DOM API: 专门操作HTML文档的简化版API
这是对部分API进行了简化
特点: 优: 简单
缺: 不是万能
HTML DOM将所有标准属性,都提前预定义在了元素对象上。可用.直接访问。默认值都是""。
获取属性值: elem.属性名
修改属性值: elem.属性名=属性值
判断是否包含属性: elem.属性名!==""
移除属性: elem.属性名=""
特例: .class属性 要更名为 .className
2. 四大状态属性: enabled disabled
checked selected
因为不是字符串类型,所以不能用核心DOM API访问
只能用HTML DOM打.访问
3. 自定义扩展属性:
什么是: 开发人员在开始标签中添加的自定义的属性
何时: 2种:
1. 临时就近缓存业务数据,避免反复请求服务端
2. 代替class,批量选择多个元素
如何: 2种:
1. <ANY 自定义属性名="值"
获取自定义属性的值: 核心DOM的万能API
ANY.getAttribute("自定义属性名");
ANY.setAttribute("自定义属性名","值")
强调: 不能用HTML DOM的.访问
查找: 属性选择器[自定义属性名=值]
2. HTML5: <ANY data-自定义属性名="值"
获取或修改时: ANY.dataset.自定义属性名
查找: 属性选择器[data-自定义属性名=值]
样式: 2种:
1. 内联样式: elem.style.css属性="值"
强调: css属性必须去横线变驼峰
list-style-type -> listStyleType
background-color -> backgroundColor
获取完整样式:
错误:
elem.style 只能获得内联样式
正确: 获得计算后的完整样式
var style=getComputedStyle(elem)
总结: 只要修改元素的样式,都用elem.style
只要获得样式,都用getComputedStyle
强调:
getComputedStyle获得的计算后的样式是只读
因为属性的来源和共享范围不确定
2. 内部样式表/外部样式表:
3步:
1.
获得样式表对象:
var sheet=document.styleSheets[i]
2. 获得CSSRule对象: 样式表中每个{}
var rule=sheet.cssRules[i]
说明: 如果rule是keyframe,则还需要继续向下找一级
3. 获得CSSRule对象中的css属性值
var value=rule.style.css属性
问题: 每个elem.style.css属性只能修改一个css属性
如果批量应用/撤销多个样式时,代码会很繁琐
解决: 今后,只要批量修改样式,都用class属性
DOM-查找和修改的更多相关文章
- Dom,查找标签和操作标签
Dom,查找标签和操作标签 文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式 ...
- iOS --SQL的增加、删除、查找、修改
iOS对于数据库的操作:增加.删除.查找.修改 首先需要创建一个数据库:本程序的数据库是在火狐浏览器里的插件里写的微量型数据库 火狐找查找SQLite Manager的步骤: 第一步:在工具栏找到附加 ...
- JavaScript Dom 查找
JavaScript Dom 查找 一.直接查找 获取单个元素 document.getElementById('i1') 获取多个元素(列表数组) document.getElementsByTag ...
- DOM查找
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 415 DOM 查找列表框、下拉菜单控件、对表格元素/表单控件进行增删改操作、创建元素并且复制节点与删除、 对表格操作、通用性和标准的事件监听方法(点击后弹窗效果以及去掉效果)
DOM访问列表框.下拉菜单的常用属性: form.length.options.selectedindex.type 使用options[index]返回具体选项所对应的常用属性:defa ...
- DOM读取和修改节点对象属性
一.获取和修改元素间的内容(3种) 1.innerHTML 获得/设置元素开始标签和结束标签之间的html原文 固定套路:1.删除父元素下所有子元素:parent.innerHTML="&q ...
- Linux查找最近修改的文件
查找当前目录下.phtml文件中,最近30分钟内修改过的文件. find . -name 查找当前目录下.phtml文件中,最近30分钟内修改过的文件,的详细情况. find . -name -ls ...
- DOM节点的修改
首先,我们将最后段落赋值给变量my: var my = document.getElementById('closer'); 接下来,我们就能够轻松地通过修改对象的innerHTML值来修改段落中的文 ...
- HTML DOM 创建与修改
修改 HTML 元素 修改 HTML DOM 意味着许多不同的方面: 改变 HTML 内容 改变 CSS 样式 改变 HTML 属性 创建新的 HTML 元素 删除已有的 HTML 元素 改变事件(处 ...
- TinyXml节点查找及修改
参考:http://blog.csdn.net/zww0815/article/details/8083550 // 读者对象:对TinyXml有一定了解的人.本文是对TinyXml工具的一些知识点的 ...
随机推荐
- javascript基础:函数参数与闭包问题
今天在写东西的时候,对函数参数的概念有些模糊,查阅相关资料后,在博客上记点笔记,方便日后复习. 首先,在js中函数参数并没有强语言中那么要求严格,他不介意传递进来多少个参数,也不在乎传进来的参数是什么 ...
- oracle中取得当前日期,前一天,当前月,前一个月
当前日:select TRUNC(SYSDATE) from dual; 前一天: select TRUNC(SYSDATE - 1) from dual; 前一天转换为日期格式: select ...
- 关于客户端调用后台事件__doPostBack函数的使用
1. 动态添加生成的控件:Asp.net开发网站,最喜欢用的就是使用服务器控件,在后台进行数据操作了,你无需再去管get还是post提交,也不用去理会form,只需在后台服务器控件的事件中就可以对 ...
- iOS - 常用本机URL跳转设置
import UIKit class ViewController: UIViewController { override func touchesBegan(_ touches: Set<U ...
- docker数据卷(转)
原文地址:http://www.cnblogs.com/zydev/p/5809616.html Docker-数据卷和数据容器卷 容器中管理数据主要有两种方式: 数据卷(Data Volumes) ...
- const修饰符用法
1. 将一个对象设置为不可修改 const int a = 100; 2. 指向const对象的指针 const int* p = 3;可以通过指针来修改指针所指向的值,但是不能通过指针*p修改对像的 ...
- Java并发-多线程面试(全面)
1. 什么是线程?2. 什么是线程安全和线程不安全?3. 什么是自旋锁?4. 什么是Java内存模型?5. 什么是CAS?6. 什么是乐观锁和悲观锁?7. 什么是AQS?8. 什么是原子操作?在Jav ...
- Java使用默认浏览器打开指定URL的方法(二种方法)
直接看代码:方法一: 复制代码 代码如下: Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler http://ww ...
- hdu 1257 && hdu 1789(简单DP或贪心)
第一题;http://acm.hdu.edu.cn/showproblem.php?pid=1257 贪心与dp傻傻分不清楚,把每一个系统的最小值存起来比较 #include<cstdio> ...
- Python 环境安装教程(Windows 10)
Python编程语言非常强大,非常容易上手,版本更新也不慢,在win10 x64中兼容性也很好,直接安装不需另外配置,虽然Python2和3有点异同.学习的话选择最新的 python 3.7.1版. ...