Advertisement

JS中的节点操作

阅读量:

创建节点

create系列方法创建节点

方法 功能
document.createElement() 创建一个元素节点
document.createTextNode() 创建一个文本节点
document.createDocumentFragment() 创建一个文档片段
document.createattribute() 创建一个属性节点
document.createComment() 创建一个注释节点

高效创建节点的方法

方法 功能
innerHTML 设置(写模式)或获取(读模式)当前标签的起始和结束里面的内容
outerHTML 设置(写模式)或获取(读模式)调用它的元素及所有子节点的HTML标签和文本
innerText 读模式:获取调用的它元素的所有子节点的文本。写模式:设置调用它的元素的所有的子节点
outerText 读模式:获取调用它的元素及所有子节点的文本。写模式:设置调用它的元素及所有的子节点
  • 使用innerHTML的限制
限制
不同的浏览器返回的文本格式不同,IE和Opera会将所有的标签转化为大写形式。而Chrome、Safari、Firefox则会按照原本格式返回,包括空格和缩进
字符串的最左边不能出现空白,IE6-8会自动移除掉它
大多数浏览器不会对innerHTML插入的script标签进行脚本操作。IE8及更早版本可以执行,但是要满足2个条件,一是必须为script标签添加defer属性,二是script标签必须要在有作用域的元素之后
IE6-8中不能单独创建meta、style、link等元素,一定要在前面加上一些字符
  • 兼容性问题
操作 兼容性
outerHTML IE4+、Safari4+、Chrome、Opera8+、Firefox8+
innerText IE4+、Safari3+、Chrome、Opera8+、Firefox不支持
outerText IE4+、Safari3+、Chrome、Opera8+、Firefox不支持

查找节点

节点遍历

  • 查找节点的API
描述 API
父节点查找第一个子节点 firstChild
父节点查找最后一个子节点 lastChild
父节点查找第n个子节点 childNodes[n] 、 childNodes.item(n)
子节点查找父节点 parentNode
查找后面的兄弟节点 nextSibling
查找前面的兄弟节点 previousSibling
查找document(文档节点) ownerDocument
  • 元素节点的API
描述 API
父节点查找第一个子节点 firstElementChild
父节点查找最后一个子节点 lastElementChild
父节点查找第n个子节点 children[n]
查找后面的兄弟节点 nextElementSibling
查找前面的兄弟节点 previousElementSibling
补充
document.documentElement可以返回文档的根节点
tagName属性可以返回元素的标签名
可以通过hasChildNodes()方法来确认元素是否含有子节点,返回值为true,则有。返回值为false,则没有
要注意空格也算文本节点
  • 类数组对象Nodelist
描述
每个节点都有childNodes属性,里面保存了一个Nodelist对象
Nodelist是一种类数组对象,用于保存一组有序节点
可以通过方括号语法来访问Nodelist的值,也有item()方法和length属性
类数组对象并不是Array的实例,没有数组对象的方法
  • 类数组对象HTMLCollection
操作 描述
Element.getElementsByTagName() 返回标签名与参数相同的标签
documents.scripts 返回页面全部script标签
documents.links 返回页面全部的a链接
documents.images 返回页面全部的图像
documents.forms 返回页面全部的表单
tr.cells 返回调用它的tr元素的所有td子元素
select.options 返回这个select的全部选项

(这只是部分操作)
这些操作返回的都是一个类数组对象HTMLCollection,这个对象可以通过方括号语法访问内部的值,也有length属性、item()方法和nameItem()方法,nameItem()方法是返回id或name与参数相同的元素,优先返回id值相同的元素,如果没有id值相同的,则返回第一个name值与参数相同的元素。

-类数组对象NamedNodeMap
语法:Element.attribute
返回的就是一个NamedNodeMap类数组对象,这个对象可以通过方括号语法访问内部的值,里面包含的是该元素的属性。同样具有length属性和item()方法。

  • 类数组对象的动态性
描述
Nodelist、HTMLCollection、NamedNodeMap三个集合都是动态的,是有生命、有呼吸的对象
它们实际上是基于DOM结构动态执行查询的结果,因此DOM结构的变化能够自动反映在这些对象中
每当文档结构发生变化时,它们都会得到更新。因此,它们始终都会保存着最新、最准确的信息

节点查找

  • 节点查找的方法
方法 描述 由谁调用
getElementById() 返回id与参数相同的元素 document
getElementsByName() 返回所有name值与参数相同的元素 document
getElementsByTagName() 返回所有标签名与参数相同的元素 document
getElementsByClassName() 返回所有Class值与参数相同的元素 Element、document
querySelector() 返回文档中匹配指定CSS选择器的一个元素 Element、document
querySelectorAll() 返回文档中匹配指定CSS选择器的一组元素 Element、document
  • 兼容性
方法 兼容性
getElementsByClassName() IE9+、Firefox3+、Safari4+、Chrome
querySelector() IE8+ 、Firefox3.5+、Chrome4+、Safari3.1+、Opera10+
querySelectorAll() IE8+ 、Firefox3.5+、Chrome4+、Safari3.1+、Opera10+

操作节点

  • 操作节点的方法
方法 描述
appendChild() 为指定元素节点的最后一个子节点之后添加节点,该方法返回新的子节点
insertBefore() 在指定的已有子节点之前插入新的子节点
replaceChild() 该方法用新节点替换某个子节点有两个参数:要插入的节点和被替换的节点,返回被替换的节点
cloneNode() 创建节点的拷贝,并返回该副本。拷贝的节点要有父节点,如果没有父节点,要通过appendChild()、insertBefore()、replaceChild()等方法对齐进行添加
normalize() 合并相邻的Text节点
SplitText() 按照指定的位置把文本节点分割为两个节点。返回新的文本节点

删除节点

  • 删除节点方法
方法 描述
removeChild() 删除某个节点中指定的子节点
removeNode() IE的私有实现。将目标节点从文档中删除,返回目标节点。参数是布尔值,默认值是false。true为包括目标节点的子元素
innerHTML 将值设置为一个空字符串能够删除该节点的子节点

DOM属性

  • 固有属性(property)
    可以用(.)操作符对固有属性进行访问。

  • 自定义属性(attribute)

方法 描述
Ele.attributes.getNameItem(‘自定义属性名’) 用于获得自定义属性节点,也可以获取在元素上显式定义了的固有属性
Ele.attributes.removeNamedItem(‘属性名’) 用于删除显式定义了的属性节点
属性对象=document.createAttribute(‘属性名’)属性对象.value=‘属性值’ Element.attributes.setNamedItem(属性对象) 用于创建自定义属性或者固有属性
  • 通用方法
方法 描述
getAttribute(‘属性名’) 用于返回元素该属性的属性值
setAttribute(‘属性名’) 用于设置元素该属性的属性值
removeAttribute(‘属性名’) 用于移除元素的该属性

以上三种方法既可以操作固有属性也可以操作自定义属性,但是有些固有属性的通用方法和点操作方法返回的值不一样。例如元素的style和onclik属性。

  • 布尔属性
属性 描述
checked 只有input标签的type属性为radio或checkbox时才有该属性。用于设置默认是否选中。当checked为true时,通过removeAttribute(‘checked’)没法取消选定
selected 用于select标签下的option标签设置默认值
readonly 用于控制是否能够修改,true不能修改。在JS里O要大写。
disabled 用于让表单元素失灵,不能修改,且提交表单后端也接收不到。true为失灵
multiple 使selected下拉列表能多选,默认false为单选
hidden HTML新增的属性,隐藏元素并且不占用页面的空间,true为隐藏
  • 字符串属性
属性 描述
id 元素的唯一标识
title 鼠标悬浮时显示的提示信息
href 用于a和link元素,表示超链接
src 用于image等,表示数据的来源
lang language,用于辅助搜索引擎、印刷机等
dir 常与bdo元素一起出现,控制文本的输出方向
accesskey 设置组合键选中,同时按住ALT与设置的按键选择一个元素
name 常用于表示表单控件的名字
value 表示控件传送到后端的值
class 用于划分某一类可能具有同样样式的元素
  • W3C全局属性
属性 描述
accesskey 设置组合键选中
class 用于划分某一类可能具有同样样式的元素
contenteditable 表示某个元素的内容是否可编辑
dir 文本的输出方向
hidden HTML新增的属性,隐藏元素并且不占用页面的空间,true为隐藏
id 元素的唯一标识
lang language,用于辅助搜索引擎、印刷机等
spellcheck 与contenteditable组合使用,如果可编辑则可以检查是否符合语法
style 定义元素的样式
tabindex 规定当使用“tab”键进行导航时元素的顺序
title 鼠标悬浮时显示的提示信息
translate 规定是否应该翻译元素的内容,目前所有的主流浏览器都无法正确支持该元素
  • data属性
描述
通过 data-属性名 命名的属性可以通过Element.dataset.属性名来获取属性的值
假如为data-属性名-属性名则调用时需要将两个属性名携程驼峰形式
  • class属性
    可以运用classList属性的各种方法为元素添加类名
方法 描述
ele.classList.add(‘类名’) 为元素的class属性增加新类名
ele.classList.remove(‘类名’) 移除元素class属性中与参数相符的类名
ele.classList.contains(‘类名’) 判断元素class属性中是否包含与参数相符的类名
ele.classList.toggle(‘类名’) 如果元素class属性中有与类名一致的属性,则删除掉,没有则添加上

全部评论 (0)

还没有任何评论哟~