博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JS】DOM
阅读量:6001 次
发布时间:2019-06-20

本文共 3366 字,大约阅读时间需要 11 分钟。

节点(Node)的类型(nodeType)

真实值     常量1        Node.ELEMENT_NODE2        Node.ATTRIBUTE_NODE3        Node.TEXT_NODE4        Node.CDATA_SECTION_NODE5        Node.ENTITY_REFERENCE_NODE6        Node.ENTITY_NODE7        Node.PROCESSING_INSTRUCTION_NODE8        Node.COMMENT_NODE9        Node.DOCUMENT_NODE10       Node.DOCUMENT_TYPE_NODE11       Node.DOCUMENT_FRAGMENT_NODE12       Node.NOTATION_NODE

使用上面的常量进行接口的类型检测时在IE中会出错,所以兼容所有浏览的的检测方法应该是:

if(myNode.nodeType == 1){
//使用真实值而非常量可以兼容所有浏览器 alert(myNode.nodeName);}

 

查找Node/Element

常用方法:getElementById/getElementsByTagName/getElementsByName

对于返回的element数组里的元素的访问方法有:nodeList[0]、nodeList.item(0)

如果想getElementsByTagName的参数传入*号,则获取到全部的文档Node。

还有一些特殊的比较常用的集合:document.forms / document.images / document.links

  

文档的写入

document.write(element) / document.writeln(element)

 

 操作节点

常用方法:

appendChild(newNode):向当前对象的文档的最后添加newNode。

insertBefore(newNode,baseNode):在baseNode前面插入newNode,如果baseNode为null则表示在最后插入newNode。

replaceChild(newNode,delNode):将newNode替换delNode。

removeChild(delNode);移除delNode。

cloneNode(boolean):复制节点,默认参数为false:即只复制节点本身,如果参数为true则复制该节点以及子节点。该方法不会复制节点的javascript事件和代码

 

操作Element的属性的方法:

获取:

对于Element本身就有的属性推荐使用:element.xxxx(例如:div.id)。

对于Element自定义的属性根据HTML5规范应该使用data-做为前缀,并且使用getAttribute("data-xxx")。

其中element.xxxx和getAttribute的区别还有:getAttribute获取的某些属性会返回属性的文本值而不是对象,例如:getAttribute("style")获取的是文本,这并不是我们想要的结果

修改:

element.xxxx = "xxx";

element.setAttribute("xxx","value");

删除

element.removeAttirbute("xxx")

遍历element的所有属性

element.attributes属性将获取一个NamedNodeMap(可以使用[index]获取里面的值)

可以使用如下方法访问具体的属性和修改属性

getNamedItem(name):返回nodeName属性等于name的节点

removeNamedItem(name):从列表中溢出nodeName等于name的节点,与removeAttribute效果相同

setNamedItem(node):添加节点

item(index):返回位于index位置处的节点。

备注:在IE7及更早的版本中attributes可能包含100多个特性,但有很多并不是我们设置的属性,所以我可以在遍历的时候加入条件(element.attributes[i].specified == true)

 

创建元素

document.createElement();

用法1(不推荐):

该方法在IE7及更早的版本存在一些问题,

例如:不能动态创建iframe的name属性、不能重置(reset())动态创建的input、动态创建的重置按钮不能重置表单、动态创建的redio和checkbox没有组的效果

var div1 = document.createElement("div");div1.id = "div1";document.appendChild(div1);

用法2(推荐):

var div1 = document.createElement("
");document.appendChild(div1);

 

动态加载JS和CSS

js

//添加文本JSfunction loadScriptString(code){    var script = document.createElement("script");    script.type = "text/javascript";    try {        script.appendChild(document.createTextNode(code));    } catch (ex){        script.text = code;    }    document.body.appendChild(script);}//添加JS文件引用function loadScript(src){    var script = document.createElement("script");    script.type = "text/javascript";    script.src = src;    document.body.appendChild(script);}function addScript(){    loadScriptString("function sayHi(){alert('hi');}");    sayHi();    loadScript("client.js");}

css

//动态添加文本样式function loadStyleString(css){    var style = document.createElement("style");    style.type = "text/css";    try{        style.appendChild(document.createTextNode(css));    } catch (ex){        style.styleSheet.cssText = css;    }    var head = document.getElementsByTagName("head")[0];    head.appendChild(style);}//动态添加样式文件function loadStyle(src){    var style = document.createElement("style");    style.type = "text/css";    style.href = src;    style.rel = "stylesheet";    document.getElementsByTagName("head")[0].appendChild(style);}function addStyle(){    loadStyleString("body{background-color:red}"); }

 

 

转载地址:http://bibmx.baihongyu.com/

你可能感兴趣的文章
HDU 5366 The mook jong
查看>>
Unity ScriptableObject自定义属性显示
查看>>
【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
查看>>
ORACLE内存管理之ASMM AMM
查看>>
移动前端常用meta标签
查看>>
非结构化数据与结构化数据提取---多线程爬虫案例
查看>>
splay版
查看>>
unity 打包编译记录
查看>>
CSS知识总结(四)
查看>>
软件工程第一次作业
查看>>
22. Generate Parentheses
查看>>
MDL相关总结
查看>>
11.表达式语言
查看>>
3.数据校验和SpringEL
查看>>
面向对象编程-何为对象
查看>>
L2TP/IPSec一键安装脚本
查看>>
android以json形式提交信息到服务器
查看>>
CetnOS 6.7安装Hive 1.2.1
查看>>
最短最优升级路径(完美世界2017秋招真题)
查看>>
【PHP基础】错误处理、异常处理
查看>>