当先锋百科网

首页 1 2 3 4 5 6 7

DOM

JavaScript分三个部分

ECMAScript标准: JS 的基本语法

DOM: Document Object Model ---> 文档对象模型-----操作页面的元素
BOM: Browser object Model...--.浏览器对象模型-- 操作的是浏览器

DOM: 文档对象模型

*文档:把- -个htmL文件看成是- -个文档,由于万物皆对象,所以把这个文档看成是一个对象

* XML文件也可以看成是一个文档

*HTML:展显示信息,数据

*XML:重点在于存储

htmL文件看成是一 个文档,那么这个文档看成是一个对象,文档中的所有的标签都可以看成是一个对象

*页面中的每个标签,都是一个元素(element), 每个元素都可以看成是一个对象*标签可以嵌套,标签中有标签,元素中有元素

* htmL页面中都有一个 根标签-html--也叫根元素

*页面中的有一一个根元素(标签- -htmL),里面有很多的元素(有很多的标签,有很多的对象)

*元素:页面中的所有的标签都是元素,元素可以看成是对象

*节点:页面中所有的内容都是节点:标签,属性,文本

 

Dom分类

核心DOM :是提供了操作HTML和XML文档的各种属性,定义了 一些公共的属性和方法。

XML DOM :针对XML操作的接口,也是一些属性和方法。

HTML DOM :针对HTML文档操作的接口,也是一些属性和方法。

Event DOM :事件对象模型,提供了 一些常用的事件。比如: onclick、 onload、 onchange

CSS DOM :让]S去操作和访问CSS的各种属性。

Document对象:

title属性

操作当前文档的标题

function getTitleO{

alert(document. title);

}

function setTitleO{

document.title = "设置标题";

}

URL属性

返回当前文档的URL。

function geturl(){

alert(document. URL);

}

Write()方法 向文档写文本。HTML表达式或者javascript代码

Document.write(“维生素”);

  • DOM操作之节点操作

整个文档是一个文档节点(Document)

每个HTML标签是一个元素节点(Element)

1 document.write("我是一个兵<br/>");

三、DOM操作之节点操作

整个文档是一个文档节点(Document)

每个HTML标签是一个元素 节点(Element)

性。每一个HTML属性是一个属性节点Atribute是 指元素中所有的属性构成的节点列表,个标记有多个属

包含在HTML元素中的文本是文本节点(Text)是最底层的节点,它下面不能再有其它子节点。

一个HTML文档,只有一个根元素,就是<htm1>标记

父节点(parentNode):当前节点的上一级元素;

子节点(childNode):当前节点的下一-级元素:

兄弟节点:相邻的两个节点,同属于一个父节点。

如: <htm1>

<head>

<title>文档标题</title>

</head>

<body>

<h1>我的标题</h1>

1

a href-"http: //www. baidu. com">我的链接</a>

12

</body>

13

</html>

1、获取节点(dom对象的方法和属性)

获取节点(js方式获取DOM节点)获取html中的标签元素

10

<h1>我的标题</h1>

1

a href-="http://www. baidu . com"我的链接</a

12

</body>

1

</html>

1、获取节点(dom对象的方法和属性)

获取节点(is方式获取DOM节点)获取htmI中的标签元素定位到html元素

document.getElementByld);

返回单个DOM元素节点

document.getElementsByName();

返回多个元素根据name属性值

document.getElementsByTagName0;

返回多个元素根据标签名

document.querySelectorAll();

返回多个元素根据选择器(可以是基本选择器,还可以是其它选

择器)

注意:后面三个是返回节点数组,注意使用方法

<div id="box">he1lo NodeType !~</div>

2

<u1 id="nav">

3

first list

<1i id="testli" name="listlist">列表01</1i>

5

<1i id=" testlist">列表02</1i>

<1i>列表03</li>

<1i>列表04</1i>

best list

</u1>

//元素节点

var element1=document. getElementById("box");alert(element1);

var element2=document. querySelectorAll("#box")[0];alert(element2);

设置或获取节点的属性值

dom元素属性(只能是标准属性设置或获取标签的文本内容

dom元素.innerText

设置或获取标签的文本内容(识别标签)

dom元素.innerHTML

案例一:设置、查看src属性

1<img src=" img/logo.png" id="img"/>

2 <button οnclick="getAttr();">查看 属性</button>

function getAttr(){

var img=document.getE1ementById(" img");

alert(img.src);

alert(img.id);

}

//修改src属性

img.src="img/mai.png";

<button onclick-"setAttr()设置属性</button>

function setAttr(){

//元素节点
var element1=document . getElementById("img");

element1.src = " ../img/mai. jpg"

ต案例-: innerText innerHtml方式区别· ป

function setIText(){

var tag ="<p>郭德纲的 </p>";

var objNode = document. getElementById("nav");

objNode. innerText=tag;

}

function setIHtm1(){

var tag = <p>口袋空空 </p> ;

var objNode = document . getE lementById("nav");

objNode. innerHTML = tag;

}

10

综合练习:全选

<input type-"'checkbox" name="all"

oncick=checkAll(this)"/>全选 <br>

<input type=" checkbox" name="child" οnclick="checkChi1d()"/>子

<br />

<input type-"checkbox" name="child" οnclick="checkChild()"/>子<br />

<input type="checkbox" name="chi1d" οnclick="checkChild()"/>子<br />

<input type="checkbox" name=" child" onclick"checkChild0"/>子<br />

function checkA11(){
或者父复选框的选中  true//false
f1ag true选中 false 未选中

var. flag=document.getE1ementsByName("al1")[0]. checked;

//获取所有的子复选框

var chi 1dNode=document. getE ementsByName("child");for(var i=0; i<chi 1dNode. length;i++){

chi dNode[i]. checked=f1ag:

}

}


//子复选框去计算父复选框是否被选中思考

function checkchild(){

//获取子复选框的个数

var childNode=document . getE lementsByName("child");

var len=chi ldNode. length;

//判断子复选框选中的个数

var count=0;

for(var i=0;i<chi ldNode. length;i++){

//子复选框被选中

if(childNode[i]. checked=-true){

count++;

}

}
//if(子复选框全选中){父复选框选中}else{不选中}

//或父复选框的节点
var allNode=document. getE lementsByName("a11")[0];

if(len= count){
allNode. checked=true;
}else{
allNode. checked=false;
2、获取节点的信息

nodeName :节点名字

nodeValue :节点值

nodeType :节点类型

element元素//上面有四种取元素节 点的方法

attr/1 //getAttributeNode()5iz3xEr t5 5XE
text文本// #text表示名字
comments注释

document文档
<a href="#" target="_blank" rel="external nofollow"  id=“a1”

class="a2" style="color:red;">
a标签

</a>

上例属性有(属性= "属性值")如: href id class style

<div id="box”>he1lo NodeType!~</div>

<u1 id="nav">

first list
<1i id="test1i"name="listlist">列表01</1i><1i id="testlist">列表02</li>

<1i>列表03</li>

<1i>列表04</1i>

best list

</u1>

//元素节点

var element1=document. getE lementById("box");

var element2=document. queryselec torAllC "#box")[0];document. wri te(e lement1. nodeName+"名<br/>");

document . write(element2. nodeName+"名<br/>");

document . write(e lement1. nodevalue+"值<br/>");//值为nu11document . write(e lement2. nodeValue+"值<br/>' );

document. wri te(e lement1. nodeType+"类型<br/>"D;//1元素节点document . write(element2. nodeType+"类型<br/>");//1元素节点

注意: getAttributeNode0方法用来得到属性节点对象,而节点属性方式是操作(设置与查看)属性直

//获取属性节点方法getAttributeNodeO

var attr1=document . getElementById("nav"). getAttributeNode("id");var attr2=document. getElementById("nav"). id;

//用节点属性只能访问与设置属性值只能操作属性不是返回节点对象,因为他不是一个对象所以没有节点对象的方法和属性

document . write("节点名字: "+attr1. nodeName+"<br />");document.write("节点名字: "+attr2. nodeName+"<br />");document.write("节点值: "+attr1. nodeValue+"<br />");
document . write("节点值: "+attr2 . nodeValue+"<br />");
document. write("节点类型: "+attr1. nodeType+"<br />");
document . write("节点类型: "+attr2. nodefype+"<br />");
var textNode= document. getE lementById("nav"), lastChiId;
document,write("节点名字"+textNode, nodeHame+"br />");
document,write("节 点值"+textNode,nodeValue+"dbr />");
document,write("节点类型"+textNode,nodeType);

3、文档节层次操作

父节点

上一个最次的节点parentNode 得到父结点对象 (标签)

子节点

注意:元素节点间的空格和回车

所有子节点

childNodes返回的是 子节点集台,使用子节点时注意数组chlldNodes[]

第一个子节点

fIrstChild

返回节点的第一个子节点通常用这方法访问该元素的文本节点

最后一个子节点lastChld

返回节点的最后一个 子节点通常用这方法访问该元素的文本

节点

兄弟节点

nextSibling

下一个节点(含文本节点)

nextElementSlbling 下一个元素节点

previousSibling上 个节点 (含文本节点)prevlousElementSlbllng上一 个元素节点

  1. 操作节点
  1. 操作节点属性

    //前面介绍方法元素属性名 操作 元素的属性

    setAtribute("属性名","属性值")

    给一个节点增加/修改属性值

    getAttribute("属性名");

    获取一个属性的值

    removeAttribute("属性名");

    删除节点的属性

    举例: <img /> img. setAttribute("src" ,"images/bg.gif")

    案例:

    <img src="img/dog. jpg" id=" imageid"/>

    <button οnclick="getAttr()">查看属性 </button><button οnclick="setAttr()">设置属性 </button><button οnclick="delAttr()">删除属性</button>

     function getAttr(){

    alert("getAttributeO方式: "+node. getAttr ibute("'src"));alert("元素节点属性方式: "+node.src);

    function setAttr(){

    var node = document. getE lementById("imageid");

    //node. src="img/mai. jpg";//属性方式

    node. setAttribute("src" ,"img/mai. jpg") //getAttribute()方式
    }

    function delAttr(){
    var node = document. getE ementßyId("imageid");
    node.src="";//给空值,
    node. removeAttribute("src");

    B.节点的值

    元素的节点可以用InnerHtml属性向html标签中添加一个标签document.createElement("");


    <div id="box">he1lo NodeType !~</div>

    <u1 id="nav">

    first list

    <1i id="testli" name="listlist">01</1i><1i id=" testlist">02</1i>

    <1i>03</1i>

    <1i>04</1i>

    best list

    </u1>

function addNode(){

var objNode = document. createl lement("img");
objNode.src="img/dog.jpg"://两种操作属性的方式objNode .setattr ibute("src","img/mai, jpg");var pnode = document.getE lementbyId("nav");pnode, appendch11d(ob jNode);

C、 创建文本节点

document.create TextNode("这贯我新加的内容");注意;这里只能是纯文本

<button onclck"addTextNode()">创建文本节点</button>
function addTextNode(){

var textNode=document. createTextNode(“是我新加的内容");var pnode=document . getElementiyId("nav");

pnode .appendChild(textNode);

D、迫加节点

在目标节点的后增加

appendChild(node):将一个节点追加到某个父 节点中子节点的最后位置。如: A.appendChlld(B); //在A节 点的末尾追加子节点B


E、插入节点
插入新节点,要确定在父节点中增加的位置,位于哪个子节点之前。pnode.insertBefore(newNode,currNode);
pnode:目标父节点pnode:目标父节点pnode:目标父节点currNode :哪个子节点之前

如:A.insertBefore(B,C);/l在A节点下加入新节点B插入的位置是在C节点前面。F、复制节点

cloneNode(true |false);/l复制节点true完全复制 false节点本身不含子节点注意:复制的元素节点如果节点含id属性必须修改

案例︰

<div id="box">he1lo NodeType !~</div>

<ul id="nav">

first list

<li id="testli" name="7istlist">列表01</1i>

<li id="testlist">列表02</1i>

<li id=“testlist”>列表02</1i>

<li>列表03</1i>

<li>列表04</li>

best list

</ul>

//插入复制节点

function copyInsert({

Var pode=document.getE1ementById(“nav”);

var copyNode = pnode.cloneNode(true);//完全复制

Var inode=document.getElementById(“listlist”);//确定!

pnode.insertBefore(copyNode ,inode);

}

6、删除节点

用来删除父节点中的一个子节点

Pnode.emovechild(DelNode);!l移除子节点

delNode :要删除的目标子节点<button onc1ick="de1Node(">删除节点</button>

//删除节点

function de1Node(){

var pnode = document.getE1ementById("nav");//确定父节点

var de1Node = document.getElementById("listlist");//确定删除的节点

pnode.removeChild(de1Node);//移除子节点
}

  1. 替换节点

用新节点替换某个子节点

pNode.replaceChild(newNode,oldNode);

//替换节点

//替换节点

function repNode(){

var pNode = document.getElementById("nav");//确定父节点

var oldNode = document.getE1ementById("listlist");

var newNode = document.createE1ement("7i");//创建节点

newNode.innerHTML ="这是新的标准标记";

pNode.replaceChild(newNode , oldNode);//替换节点

5、节点样式

每一个HTML标签都有一个叫style属性,它对应元素对象style,该对象的属性与CSS中的属性名字一—对应。

A、行内样式

语法∶目标结点.style.cssText = "行内样式"

目标结点.style = "行内样式”兼容性不好

注意∶该方式操作行内样式如果没有设置过,不可读取,哪怕有默认样式也不行。

ps∶任何操作样式方法均可使用getComputedStyle()方法取层叠计算后的样式对象如: var widthTest = getComputedStyle(目标节点,null).width;

B、类样式

语法︰目标结点.className= "类样式";

注意:对于class属性必须使用clasName属性名,因为class的保留字。

.teststyle{

color: red;

font-size: 30px;

}

<p id="text">文本内容</p>行内样式

var text = document.getElementById( "text");

text.style = "color : red ; ";

类样式

var text = document.getE lementById( "text");

text.className="teststyle";

CSS属性值和DOM的style属性值之间的映射

HTML中的CSS样式

DOM中的CSS样式

background-color

backgroundColor

background-image

backgroundImage

background-repeat

backgroundRepeat

font-family

fontFamily

font-size

fontSize

font-style

fontStyle

border-style

bordestyle

color

color

text-align

textAlign

cursor

cursor

position

position

top, left, bottom, right

top, left, bottom, right

width, height

width, height

z-index

zlndex

visibility

visibility

overflow

overflow

6、this关键字

this做为实参传入函数中,this指的是当前的节点

this做为实参传入函数中,this指的是当前的节点

1<input type="checkbox" name="a17" οnclick="checkA17(this)"/>全选<br />

1

/全选按钮

2

function checkA17(x){

/ /

或父复选框的选中情况true/false

/ /

flag true选中false未选中var f1ag=x.checked;

6

//获取所有的子复选框

7

var childNode=document.getE1ementsByName("child");

8

for(var i=0; i<childNode. 1ength;i++){

9

childNode[i].checked=flag;

10

11

}

小结

节点操作:访问、属性、创建

( 1)节点的访问:firstChild、lastChild、childNodes、parentChild(父子节)

可以使用元素对象的方法进行代替:getElementByld()、getElementsByTagName()

(2)节点属性的操作:setAttribute()、removeAttribute()、getAttribute()

( 3)节点的创建、删除、追加∶

创建节点:document.createElement(tagName)

复制节点: A.cloneNode(true/false);复制A节点(true完全复制false节点自身)

删除节点(必须父节点下的子节点才能被删除): parentObj.removeChild(nodeobj)

追加节点: parentObj.appendChild(nodeObj);

插入节点: parentObj.insertBefore(new,current) :兄弟节点

上一个兄弟节点

previousElementSibling

下一个兄弟节点

nextElementSibling

第一个兄弟节点

firstNode

最后一个兄弟节点

lastNode

补充︰元素对象的属性

tagName :取一个标记的名称,同nodeName一样;

innerHTML∶指标记对中的HTML文本(含有HTML标记的文本),一般指双边标记;比如︰

二级标题

style :对应HTML标记的style属性;id :对应HTML标记的id属性;

offsetwidth:指元素的宽度,不含滚动条中的内容;

offsetHeight:指元素的高度,不含滚动条中的内容,是只读属性;