a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 140|回复: 0

[专业语言] JAVA认证:术语汇编JavascriptDOM技术研究

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
你对Javascript DOM技术的是否了解,这里我们讨论的是javascript中或者说xhtml(html)对DOM的实现,希望对你的学习有所帮助。
4 H+ n" V+ i: d8 A- c    Javascript之DOM技术7 ?& q* U3 ]# D  W/ e
    首先需要理解的一点是,DOM是针对XML的基于树的API,它的实现有很多(各语言基本都有自己的实现),我们讨论的是javascript中或者说xhtml(html)对DOM的实现。
/ f* g( ?( p2 ~, F* v0 @    一、使用DOM+ t2 `# m2 ]; E2 [9 Z
    考虑一个html文件:7 O  ?+ h$ f$ B( G- S+ R
     测试  测试
9 l& q$ K/ j( {' k! Z+ y   1.访问节点:0 I/ h) o: p/ f. U1 C
    访问html元素:varoHtml=document.documentElement;
% w2 V8 a4 J; {6 o  J7 \0 ~9 m    获取head元素:varoHead=oHtml.firstChild;
0 S7 L: |/ t: Y2 ^    获取body元素:varoBody=oHtml.lastChild;或者varoBody=document.body;9 [* l6 p' t: x6 f
    也可以通过childNodes来做同样的工作:8 z) ?' F/ f0 ?
    varoHead=oHtml.childNodes[0]或者oHtml.childNodes.item(0);2 y" j5 r0 c& F* H. a6 o9 h
    varoBody=oHtml.childNodes[1]或者oHtml.childNodes.item(1);
7 B5 S/ o/ |: K. Y* K7 n6 d    判断节点间关系:( _' V- l" ^$ y0 B  {* l6 L
    alert(oHead.parentNode==oHtml);  alert(oBody.previousSibling==oHead);  alert(oHead.nextSibling==oBody);  alert(oHead.ownerDocument==document); 2.检测节点类型:
" x# v, s9 Q0 P9 t% s" _/ n3 K    通过节点的nodeType属性来检验节点类型:
8 t: s0 {- M6 I1 A! U: y3 y; \7 H    alert(document.nodeType);//输出9
. y# C" w  w& ?    需要注意的是,DOM兼容的浏览器(以FF2.0为例),拥有Node.DOCUMENT_NODE、Node.ELEMENT_NODE等常量。各常量名称与数值对照表如下:% |- e% g' e9 O7 i
    ELEMENT_NODE1  ATTRIBUTE_NODE2  TEXT_NODE3  CDATA_SECTION_NODE4  ENTITY_REFERENCE_NODE5  ENTITY_NODE6  PROCESSING_INSTRCTION_NODE7  COMMENT_NODE8  DOCUMENT_NODE9  DOCUMENT_TYPE_NODE10  DOCUMENT_FRAGMENT_NODE11  NOTATION_NODE12  IE6不支持,不过你可以自定义一个JS对象Node。; R( e1 X" s" a  r1 I+ k0 y8 Z
    3.处理特性
4 h7 i" x8 T7 p0 z7 u    处理特性可以使用标准的NameNodeMap中的方法:
6 D- c. Q2 Q# L& o    getNamedItem(name)removeNamedItem(name)  setNamedItem(node)item(pos) 比如:测试</p>0 P5 O9 E- e8 D. n
    假设变量oP是上面的p节点的引用,我们要访问oP的id属性:! L6 d8 P9 ?) }( t7 g% H
    varsId=oP.attributes.getNamedItem("id")。nodeValue;
4 |6 V. c( H( l# p6 b    这些方法用起来很累赘,所以DOM又定义了三个方法来简化:+ V9 x: F; D% q0 W4 A6 `0 P0 X
    getAttribute(name)——返回名称为name的属性的值) p2 ?7 V) f$ A; }/ T3 ~$ I
    setAttribute(name,value)——顾名思义5 J3 d$ Q% j3 d* z) }% W
    removeAttribute(name)——顾名思义: a5 w+ w* ~0 H9 {7 u
    上面的例子可以改写为:4 A& n7 i, S5 d
    varsId=oP.getAttribute("name");3 j  X" \! s4 z, V4 F1 n
    4.访问指定节点:
: Q; v& h# j- q! ^    熟知的getElementByTagName(name),getElementByName(name),getElementById(id)三个方法,不再展开 5.创建和操作节点:
) o8 f  J+ Z6 H: n8 P0 R$ s/ Y    (1)创建新节点,一张IE(6.0)和FF对DOMLevel1的创建新节点方法支持的对照表:1 A2 R# L/ E( h
    方法IEFF
$ Y0 ?& R+ Z3 I) V    createAttribute(name)YY  createCDATASection(text)NY  createComment(text)YY  createDocumentFragment()YY  createElement(tagName)YY  createEntityReference(name)NY  createProcessingInstruction(  target,data)NY  createTextNode(text)YY  下面介绍常用的几个方法
* S$ K4 o/ ~2 Z3 e    (2)createElement(),createTextNode(),appendChild()" ~: t2 X$ V" C/ B$ _' e
    例子:' b( @1 ~. ^8 c
      createElement()Example  functioncreateMessage(){  varoP=document.createElement("p");  varoText=document.createTextNode("HelloWorld!");  oP.appendChild(oText);  document.body.appendChild(oP);  }  </script>     在页面载入后,创建节点oP,并创建一个文本节点oText,oText通过appendChild方法附加在oP节点上,为了实际显示出来,将oP节点通过appendChild方法附加在body节点上。此例子将显示HelloWorld!
, g& A+ T/ X" p2 D3 t    (3)removeChild(),replaceChild()和insertBefore()
. f7 K+ k/ d$ n+ X* a, t% p  Q    从方法名称就知道是干什么的:删除节点,替换节点,插入节点。需要注意的是replaceChild和insertBefore两个参数都是新节点在前,旧节点在后。
% P# h0 j0 k8 G5 U! B    (4)createDocumentFragment()8 k- f, W6 C9 W9 V% r" W
    此方法主要是为了解决大量添加节点时,速度过慢。通过创建一个文档碎片节点,将要添加的新节点附加在此碎片节点上,然后再将文档碎片节点append到body上面,替代多次append到body节点。
% u) s2 P5 O' H9 h9 e9 m  l: M% |( o    例子:
- E" {- I' P: L" P# r& w' N9 f      insertBefore()Example  functionaddMessages(){  vararrText=["first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth"];   varoFragment=document.createDocumentFragment();   for(vari=0;i
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-4 03:55 , Processed in 0.209864 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表