1. 修改:

3样:

1. 内容: 3个属性:

1. 获取或修改原始HTML片段: 元素.innerHTML

2. 获取或修改纯文本内容: 元素.textContent

vs innerHTML

1. textContent去掉了内嵌的标签

2. textContent将特殊符号翻译为正文

以上两个获得的都是双标记中,开始标记和结束标记之间的内容

问题: 表单元素是单标记,没有结束标记,所以也就没有innerHTML和textContent

3. 获取或设置表单元素的内容: 表单元素.value

2. 属性: 3种:

1. HTML标准属性:

什么是: HTML标准中规定的那些字符串类型的属性。比如: id, title, class, name, value, src, href...

获取或修改HTML标准属性: 2种方式:

1. 早期的核心DOM函数: 4个:

var 属性值=元素.getAttribute("属性名") 获取属性值

元素.setAttribute("属性名","新值") 修改属性值

var bool=元素.hasAttribute("属性名") 判断元素是否包含该属性

元素.removeAttribute("属性名") 移除元素上的指定属性

2. 后来的HTML DOM函数:

什么是HTML DOM: 是在旧版基础上,对部分常用函数和常用对象提供的简化版函数。

做的第一个简化: 每个元素对象中都提前预置好了所有HTML标准属性,只不过,值暂时为""。

今后在操作HTML标准属性时,只要用: 元素.属性名

特例:

html中: <元素 class="类名"

js中不能用.class,因为class是js的关键词。所以,凡是操作html中的class属性,一律更名为className。js中操作className等效于操作HTML中的class。

获取属性值: 元素.属性名

修改属性值: 元素.属性名=值

强调: 只要修改标准属性,值必须是字符串。如果给的不是字符串,DOM会自动转为字符串。

判断是否包含指定属性: 元素.属性名!=="",说明包含。因为所有标准属性的默认值是""。

移除属性: 元素.属性名="";

只要把元素的属性值改为空字符串,则当前属性失效。

问题: 以上函数,只能操作字符串类型的HTML标准属性。无法操作bool类型的HTML属性:

2. 状态属性:

什么是: HTML标准中规定的,值为bool类型的属性: disabled  selected   checked  multiple ...

特征: 所有状态属性在HTML中使用时,都不带=和属性值。加上,就起作用。去掉就失去作用。

如何操作:

不能用核心DOM的4个函数(getAttribute(), setAttribute(), hasAttribute(), removeAttribute()),因为核心DOM的四个函数只能操作字符串类型的属性

只能用.来访问,值都是bool类型:

比如:

禁用一个按钮: btn.disabled=true

相当于:

<button disabled>...

启用一个按钮:btn.disabled=false

选中一个checkbox:

chb.checked=true;

相当于:

<input type="checkbox" checked>

取消选中一个checkbox:

chb.checked=false;

补: CSS中有一组状态伪类:

:disabled   :checked    :selected

专门用于选择处于某种状态的元素

比如: input:checked 选择的是被选中的input元素

button:disabled 选择的是被禁用的按钮

3. 自定义扩展属性:

什么是自定义扩展属性: HTML标准中没有规定的,程序员自发添加的属性。

何时: 2个典型用途:

1. 在客户端html元素上临时缓存数据

比如: data-target="id值";

2. 代替其他选择器,用来选择触发事件的元素,为元素绑定事件。

比如: data-toggle="dropdown"

如何:

1. 为元素添加自定义扩展属性:

行业规范:

<元素 data-自定义属性名="值"

2. 用自定义扩展属性作为查询条件,只能用属性选择器:

[data-属性名=值]

3. 获取或修改自定义属性的值:

不能用.访问自定义扩展属性:

因为自定义扩展属性是程序员在html标准之外,后天添加的自定义属性。则HTML DOM的元素对象中就不包含这些自定义扩展属性。

1. 可以用核心DOM: ——没有兼容性问题

元素.getAttribute("data-属性名")

元素.setAttribute("data-属性名",值)

为什么: getAttribute()每次都是去HTML代码中查找属性。

2. HTML5标准中规定: 有兼容性问题

可以 元素.dataset.属性名

其中dataset可以自动收集页面上所有data-开头的自定义扩展属性。这就是为什么自定义扩展属性名习惯上都要带data-前缀的原因!

3. 样式:

1. 修改内联样式:

每个元素都有一个style属性,代表html中开始标签中的style属性。

元素的style属性中又包含了所有css样式属性

修改元素对象的style属性中的css样式属性,等效于直接修改html中开始标签中的style=""

比如: 元素.style.backgroundColor="red"

等效于: <元素 style="

再比如: 显示隐藏:

元素.style.display="block"

等效于: <元素 style="display:block"

元素.style.display="none"

等效于: <元素 style="display:none"

强调: 所有带-的css属性,一律去横线,变驼峰命名。

比如: list-style-type  -> listStyleType

background-color -> backgroundColor

2. 获取样式:

问题: 元素.style仅包含内联样式,不包含样式表中的样式。所以,如果用元素.style.css属性,也只能获得内联样式,无法获得样式表中定义的样式。

解决: 获得计算后的样式:

什么是计算后的样式: 最终应用到这个元素上的所有样式的集合。

何时: 今后,只要获取样式,都要获取计算后的样式。

如何: 2步:

1. 先获得计算后的样式对象

var style=getComputedStyle(元素)

获得指定元素计算后的完整样式对象

强调: getComputedStyle是内置的全局函数,可直接使用!

返回值: 是一个包含所有css属性的巨大的对象

2. 才是从样式对象中提取想要的css属性:

var 属性值=style.css属性

强调: 计算后的样式,都是只读的。

因为样式的来源不确定,不确定有多少元素正在共享该属性。所以不允许擅自修改。以免牵一发而动全身。

总结: 想修改一个元素的css属性:

元素.style.css属性=值

想获取一个元素的css属性:

getComputedStyle(元素).css属性

问题: 修改样式时,style.css属性一句话只能改一个css属性。而网页中一个效果的变化,可能同时涉及多个css说行。如果用style.css属性=值 修改,代码会很繁琐。而且,加样式时繁琐一次,去掉样式时同样繁琐!

解决: 当批量修改样式时,用className修改是最划算的!

总结:

修改:

1. 内容:

1. 原始html 片段: .innerHTML

2. 纯文本: .textContent

3. 表单元素的内容: .value

2. 属性:

1. HTML标标准属性:

1. 核心DOM: .getAttribute()

.setAttribute()

.hasAttribute()

.removeAttribute()

2. HTML DOM: 也可用.改

2. 状态属性: 只能用.改

3. 自定义扩展属性:

定义: <元素 data-自定义属性名="值"
        获取或修改:

元素.getAttribute("data-属性名")

元素.setAttribute("data-属性名","值")

HTML5: 元素.dataset.属性名

3. 样式:

1. 修改内联样式: 元素.style.css属性="值"

2. 获取: getComputedStyle(元素).css属性

DOM的使用的更多相关文章

  1. 关于DOM的操作以及性能优化问题-重绘重排

     写在前面: 大家都知道DOM的操作很昂贵. 然后贵在什么地方呢? 一.访问DOM元素 二.修改DOM引起的重绘重排 一.访问DOM 像书上的比喻:把DOM和JavaScript(这里指ECMScri ...

  2. 读书笔记:JavaScript DOM 编程艺术(第二版)

    读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...

  3. 页面嵌入dom与被嵌入iframe的攻防

    1.情景一:自己的页面被引入(嵌入)至别人的页面iframe中 if(window.self != window.top){ //url是自己页面的url window.top.location.hr ...

  4. 通俗易懂的来讲讲DOM

    DOM是所有前端开发每天打交道的东西,但是随着jQuery等库的出现,大大简化了DOM操作,导致大家慢慢的“遗忘”了它的本来面貌.不过,要想深入学习前端知识,对DOM的了解是不可或缺的,所以本文力图系 ...

  5. HTML DOM 介绍

    本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...

  6. HTML DOM 对象

    本篇主要介绍HTML DOM 对象:Document.Element.Attr.Event等4个对象. 目录 1. Document 对象:表示文档树的根节点,大部分属性和方法都是对元素进行操作. 2 ...

  7. 重撸js_2_基础dom操作

    1.node 方法 返回 含义 nodeName String 获取节点名称 nodeType Number 获取节点类型 nodeValue String 节点的值(注意:文本也是节点) 2.inn ...

  8. 虚拟dom与diff算法 分析

    好文集合: 深入浅出React(四):虚拟DOM Diff算法解析 全面理解虚拟DOM,实现虚拟DOM

  9. 窥探Vue.js 2.0 - Virtual DOM到底是个什么鬼?

    引言 你可能听说在Vue.js 2.0已经发布,并且在其中新添加如了一些新功能.其中一个功能就是"Virtual DOM". Virtual DOM是什么 在之前,React和Em ...

  10. jQuery学习之路(2)-DOM操作

    ▓▓▓▓▓▓ 大致介绍 jQuery作为JavaScript库,继承并发扬了JavaScript对DOM对象操作的特性,使开发人员能方便的操作DOM对象. ▓▓▓▓▓▓ jQuery中的DOM操作 看 ...

随机推荐

  1. 【转帖】Python 重复造轮子/造轮子找模子,你都应该熟读该文

    Chardet,字符编码探测器,可以自动检测文本.网页.xml的编码. colorama,主要用来给文本添加各种颜色,并且非常简单易用. Prettytable,主要用于在终端或浏览器端构建格式化的输 ...

  2. 十六, Oracle约束

    前言 数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则,在oracle中,数据完整性可以使用约束.触发器.应用程序(过程.函数)三种方法来实现,在这三种方法中,因为约束易于维护,并且具有最好的性 ...

  3. Python3 字符串格式化(%操作符)

    格式符 格式符为真实值预留位置,并控制显示的格式.格式符可以包含有一个类型码,用以控制显示的类型,如下: %s    字符串 (采用str()的显示) %r    字符串 (采用repr()的显示) ...

  4. Nginx重写请求后将url?后的参数去除

    2019独角兽企业重金招聘Python工程师标准>>> 使用?结尾     注意,关键点就在于"?"这个尾缀.重定向的目标地址结尾处如果加了?号,则不会再转发传递 ...

  5. JavaWEB开发时FCKeditor类似office界面的ajax框架,加入后就能做界面类似office,能进行简单的文本编辑操作+配置手册...

    2019独角兽企业重金招聘Python工程师标准>>> FCKeditor是一款功能强大的开源在线文本编辑器(DHTML editor),它使你在web上可以使用类似微软Word 的 ...

  6. 图论--2-SAT--HDOJ/HDU 1824 Let's go home

    Problem Description 小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头.                         -- 余光中 集训是辛苦的,道路是坎坷的,休息还是必须的. ...

  7. python(If 判断)

    一.if判断 如果 条件满足,才能做某件事情, 如果 条件不满足,就做另外一件事情,或者什么也不做 注意: 代码的缩进为一个 tab 键,或者 4 个空格 在 Python 开发中,Tab 和空格不要 ...

  8. postman(介绍)

    Postman 界面介绍 一. 安装后首次打开 postman,会提示你是否需要登录,登录的话可以云端保存你的收藏及历史记录,不登陆不影响使用.   二. 进入后就是如下图所示的界面了.看到这么多按钮 ...

  9. 重新认识Java注解

    重新认识Java注解 今天Debug看源码的时候,无意间看到这么个东西 首先承认我的无知,看到这个我很惊诧. 也勾起了我的好奇心,于是有了这篇认知记录. 下面就来重新认识下注解吧! 注解的本质 关于运 ...

  10. 基于thinkphp3.2.3开发的CMS内容管理系统(二)- Rbac用户权限

    基于thinkphp3.2.3开发的CMS内容管理系统 thinkphp版本:3.2.3 功能: --分类栏目管理 --文章管理 --商品管理 --用户管理 --角色管理 --权限管理 --友情链接管 ...