红宝书 第10章整理——DOM

1、关于DOM

1、DOM——文档对象模型。将HTML文件描绘成一个层次化的节点树,允许开发人员添加、修改页面。

2、文档节点是每个文档的根节点,是最外层的元素,每个文档只能有一个文档元素,对于HTML文件来说,文档元素始终是<html>元素。

3、每个节点都有个nodeType属性,不同类型的节点有相应不同的值。比如element为1,document为9,text为3.

所以可以根据nodeType的值来判断这个节点的类型。比如在用nodelist时,对于列表元素来说会返回很多个带空的列表,那么可以通过if(nodelist[i].nodeType==1){ ....  }来筛选出是li元素(element性质)

4、操作节点:

① 添加:

1、fathernode.appendChild(childnode)   //默认在最后添加,为lastChild

如果childnode为已经存在的子节点,那么就会将其从原始位置移到lastChild位置

2、fathrernode.insertBefore(newnode , somenode)    //将newnode添加到somenode之前,并且成为somenode的同级别节点,并不是父级节点

②替换:

fathernode.replaceChild(newnode , somechildnode)    // 将newnode替换到fathernode下的somechildnode节点,原来的somechildnode将被完全删除

③删除:

fathernode.removeChild(somechildnode)   //直接将fathernode中的somechildnode删除

④复制:

cloneNode( flag )    //flag可以选true——深复制,即复制该节点及其下面所有的子节点

                                                  false——浅复制,只复制该节点本身

注意复制完的节点为孤儿节点,需要为其指定一下父节点,例如append,inset

而且不会复制绑定到节点上电js函数,需要自己重新写

5、节点类型

①Documnet

documnet.body  ==<body>

document.title  == <title>

document.URL  ==完整URL

document.domain  ==url中的域名,可以进行设置解决跨域问题。例如两个页面直接不同URL但是要互相访问,那么就将二者的domain名设置一样的,就可以通过js通信了

document.getElementById

documnet,getElementByTagName  ==返回一个nodeList,需要用类似数组的方式进行调用里面的内容,想获得文档所有内容,直接TagName(" * ") 代表全部

documnet.getElementByName  ==最常用语单选按钮,一组单选radio设置相同name,这样才能做到每次直选1个,方法会返回此时选中的那一个

documnet,write  == 可以直接在括号内写标签内容,会自动生成dom元素。也可以引入外部js文件,注意写<script>的时候,结尾</script>需要添加转义符<\/script>,否则会与文档自己原有的</script>起冲突

document.writeln  == 作用与write相同,就是自带一个换行符

②Element

即HTML的元素

有id,class(注意对象用的时候为className),title(为提示性内容)之类的常见属性。

可以创建createElement(" ..."),直接写标签名当参数

访问元素的子节点:childNodes,注意<ul>元素中的问题

③Text

就是纯纯的文本,默认可以包含内容的节点最多只能有一个文本节点,无论多长都算一个

举例<div>hello world</div> ,那么<div>含有一个文本节点,可以用nodeValue,从节点的层面对其进行修改

也可以创建document.createTwxtNode("...."),同样其中内容可以直接上标签,读取的时候回自动转义。反过来也要注意用text节点读取的value值,若里面有<>,/这种标签用的符号,读出来也会被转义,比如<是&lt之类 的。

有一个合并文本节点的方法:normalize(),会自动合并父级下的所有text子节点,为拼接起来的值

④Comment

是注释的内容,值可以通过nodeValue()获取

2、动态插入DOM

① 动态插入script

两种方法:

1、直接插入外部文件

var script = document.creatElemrnt("script");
script.type = "text/javascript";
script.src = "new.js";
documnet.body.appendChild(script);


效果等同于HTML中直接写:

<script type="text/javascript" src="new.js"></script>


2、直接插入代码

var script = document.creatElemrnt("script");
script.type = "text/javascript";
script.appendChild(document.creatwTextNode("function say(){alert("hi!")}"));
documnet.body.appendChild(script);


② 动态插入css


两种方法:

1、用<link>包含外部文件

var link = document.createElement("link");
link.rel = "stylesheet";
link.type = "text/css";
link.href = "style.css";
var head = document.getElementByTagName("head")[0]; //注意link要添加在<head>中
head.appendChild(link);


等同于在HTML中直接写:

<link rel="stylesheet" type="text/css" href="style.css">



2、用<style>直接写

类比,创建style元素,然后通过创建text类型节点直接写内部的代码

③ 动态插入table


在js中,特意为table准备了一些属性和方法可以直接调用。比如插入一行insertRow()

也有为tr准备的一些方法


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值