`
keke_wanwei
  • 浏览: 126031 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

DOM知识的翻译与整理

阅读更多

先来看一张简单的文档树


很明显树的顶层节点是NodeA节点,接下来可以通过指定的合适节点移动到树中的任何点,结合以下的代码你可以更好的了解这棵树节点间的相互关系:.1138611

     NodeA.firstChild = NodeA1      NodeA.lastChild = NodeA3      NodeA.childNodes.length = 3      NodeA.childNodes[0 ] = NodeA1      NodeA.childNodes[1] = NodeA2      NodeA.childNodes[2] = NodeA3      NodeA1.parentNode = NodeA      NodeA1.nextSibling = NodeA2      NodeA3.prevSibling = NodeA2      NodeA3.nextSibling = null      NodeA.lastChild.firstChild = NodeA3a      NodeA3b.parentNode.parentNode = NodeA 

DOM定义对操作一个文档对象的节点结构提供了实用的方法,它提供了像执行对象插入,更新,删除,克隆等这些常用的方法.1138611

insertBefore()--在参考子节点之前插入一个新的子节点.如果参考的子节点为null,则新的子节点将作为调用节点的最后一个子节点插入.1138611

replaceChild()--在childNodes集合种使用指定的newChild来代替oldChild;如果代替成功,则返回oldChild;如果newChild是null,则只需删除oldChild即可 .1138611

removeChild()--从节点的ChildNodes集合中删除removeChild指定的节点,如果删除成功,则返回删除的子节点 .1138611

appendChild()--添加一个新节点到childNodes集合的末尾,如果成功,则返回新节点 .1138611

cloneNode()--创建一个新的、复制的节点,并且如果传入的参数是true时,还将复制子节点,如果节点是一个元素,那么还将复制相应属性,返回新的节点 .1138611

为了在一棵文档树中访问或者建立一个新的节点,可以用下面这些方法:
getElementById()
getElementsByTagName()
createElement()
createAttribute()
createTextNode()
注意:在一个页面中只有一个文档对象,除了getElementsByTagName()外,其它方法均只能通过document.methodName()调用. .1138611

再看一下下面这个例子:.1138611

     <html>     <head>     <title></title>     </head>     <body>     <p>This is a sample paragraph.</p>     <SCRIPT LANGUAGE="JavaScript">     <!--     alert(document.documentElement.lastChild.firstChild.tagName);     //-->     </SCRIPT>     </body>     </html>

结果将会显示"P",下面是一些解释
document.documentElement - gives the page’s HTML tag.
lastChild - gives the BODY tag.
firstChild - gives the first element in the BODY.
tagName - gives that element’s tag name, "P" in this case..1138611

另一个:.1138611

     <html>     <head>     <title></title>     </head>     <body>      <p>This is a sample paragraph.</p>     <SCRIPT LANGUAGE="JavaScript">     <!--     alert(document.documentElement.lastChild.firstChild.tagName);     //-->     </SCRIPT>     </body>     </html>   

这个例子和上面并没有什么大的区别,仅仅是多了一个空行,但是在NS中,会自动为空行加上一个节点所以返回值是"undefined",而在IE中将跳过空行仍然指向P标签 .1138611

更常用的方法:.1138611

   <p id="myParagraph">This is a sample paragraph.</p>    ...    alert(document.getElementById("myParagraph").tagName);

这种方法你不用关心节点在文档树的哪一个地方,而只要保证在页面中它的ID号是唯一的就可以了 .1138611

接下来一种访问元素节点的方法是document.getElementsByTagName(),它的返回值是一个数组,例如你可以通过下面的例子改变整个页面的连接.1138611

     var nodeList = document.getElementsByTagName("A");     for (var i = 0; i < nodeList.length; i++)     nodeList[i].style.color = "#ff0000"; 

attribute和attributes

attribute对象和元素相关,但是却没有被认为是文档树的一部分,因此属性不能作为子节点集合的一部分来使用.
有三种方法可以为元素建立新的属性.1138611

   1.     var attr = document.createAttribute("myAttribute");     attr.value = "myValue";     var el = document.getElementById("myParagraph");     el.setAttributeNode(attr);   2.     var el = document.getElementById("myParagraph");     el.setAttribute("myAttribute", "myValue");   3.     var el = document.getElementById("myParagraph");     el.myAttribute = "myValue";

你可以在html标签种定义自己的属性:.1138611

   <p id="myParagraph" myAttribute="myValue">This is a sample paragraph.</p>    ...    alert(document.getElementById("myParagraph").getAttribute("myAttribute"));

返回值将是"myValue".但是请注意这里必须使用getAttribute,而不是AttributeName,因为有一些浏览器并不支持自定义属性 .1138611

attributes也可以被轻易的从一个元素中删除,你可以使用removeAttribute()或者将element.attributeName指向一个null值..1138611

通过attributes我们就可以产生一些动态效果:.1138611

     <p id="sample1" align="left">Text in a paragraph element.</p>      ... code for the links ...      document.getElementById(’sample1’).setAttribute(’align’, ’left’);     document.getElementById(’sample1’).setAttribute(’align’, ’right’);

另一种:.1138611

     <p id="sample2" style="text-align:left;">Text in a paragraph     element.</p>      ... code for the links ...      document.getElementById(’sample2’).style.textAlign = ’left’;     document.getElementById(’sample2’).style.textAlign = ’right’;

跟上面的例子一样,展示了可用通过元素修改style中的属性,甚至是class中的.唯一要提到的是textAlign是从style中的text-align中演变而来的,有一条基本规律,就是style中的属性如果出现-则在dom中将会被去掉并且随后的一个字母将改为大写,还有一点就是如果即使元素中没有style属性,上述例子同样可以使用 .1138611

text nodes:

先看一下例子.1138611

      <p id="sample1">This is the initial text.</p>       ... code for the links ...       document.getElementById(’sample1’).firstChild.nodeValue =     ’Once upon a time...’;     document.getElementById(’sample1’).firstChild.nodeValue =     ’...in a galaxy far, far away’;

首先text nodes并没有像elements那样具有id属性,所有它并不能直接通过document.getElementById()或者document.getElementsByTagName()访问
看一下下面的结构也许会更明白一些

可以看出通过document.getElementById(’sample1’).firstChild.nodeValue就可以读取或者设置text nodes的值了 .1138611

另一个更加复杂一点的例子.1138611

<p id="sample2">This is the <b>initial</b> text.</p>

它的文档结构

在这里通过document.getElementById(’sample1’).firstChild.nodeValue讲仅仅改变"This is the"
而initial text.将不会改变.在这里大家应该看到了它和innerHTML的不同了.当然你也可以这样用.1138611

document.getElementById(’sample3’).firstChild.nodeValue =     ’<b>Once</b> upon a time...’;     document.getElementById(’sample3’).firstChild.nodeValue =     ’...in a galaxy <i>far, far</i> away’;

其中的html代码将不会被解释,浏览器将把他们当成普通的文本来显示 .1138611

创建和删除text nodes:

var myTextNode = document.createTextNode("my text");

通过上面的代码你可以创建一个新的text node,但是它并不是文档树的一部分,要让它显示在页面上就必须让它成为文档树中某一个节点的child,因为 text nodes不能有儿子,所以你不能将它加入到一个text nodes中,attribute也不属于文档树的一部分,这条路也不行,现在只剩下elements nodes 了,以下的例子展示了如何添加和删除一个text node.1138611

<p id="sample1">Initial text within a paragraph element.</p>      ... code to add a text node ...      var text = document.createTextNode(" new text " + (++counter1));     var el = document.getElementById("sample1");     el.appendChild(text);      ... code to remove the last child node ...      var el = document.getElementById("sample1");     if (el.hasChildNodes())     el.removeChild(el.lastChild);

增加文本是很容易的,上面的代码建立了一个新的text node并且通过appendChild()方法将其加入到childNodes数组的末尾,并设置了一个counter1的全局变量,利于观察 hasChildNodes()的返回值是true or false;用来判断当前节点是否还有child,以阻止当其没有child的时候调用removeChild()产生的错误 .1138611

创建element nodes

有了上面的基础,应该更容易理解了,先看一下下面的代码.1138611

     <div id="sample1">This text is in a DIV element.</div>      ... code for the link ...      var paraEl, boldEl;      paraEl = document.createElement("p");     boldEl = document.createElement("b");     paraEl.appendChild(document.createTextNode("This is a new paragraph with "));     boldEl.appendChild(document.createTextNode("bold"));     paraEl.appendChild(boldEl);     paraEl.appendChild(document.createTextNode(" text added to the DIV"));     document.getElementById("sample1").appendChild(paraEl);

你还可以直接为新加的element nodes设置attribute,以下两种都可以:.1138611

     boldEl.style.color = "#ffff00";     paraEl.appendChild(boldEl);

或者:.1138611

     paraEl.appendChild(boldEl);     boldEl.style.color = "#ffff00"; 


分享到:
评论

相关推荐

    Linq资源网络搜索整理

    **Linq资源网络搜索整理** Linq(Language Integrated Query,语言集成查询)是.NET Framework 3.5及更高版本引入的一项重要技术,它为.NET程序员提供了一种在各种数据源上进行查询的强大而统一的方式。Linq使得在...

    java web 期末试题填空简答整理.pdf

    12. DOM 根对象:在浏览器的DOM 中,根对象是 window。 13. 表单对象:表单对象是 document 对象的子对象。 14. Div 层控制:Div 层的隐藏和显示主要是用到 display 属性,该属性的值为 none 时隐藏 Div 层。 15....

    java-web-期末试题填空简答整理.doc

    23. param 标准动作用于为其他动作标签提供附加参数信息,该动作通常可以与 &lt;jsp:include&gt; 和 &lt;jsp:forward&gt; 等一起使用。 24. JSP 内置对象中主要用于输入输出功能的有 request 对象、response 对象和 out 对象。 ...

    (翻译)如何成为一个优秀的jsp程序员

    - **撰写技术文章**:将自己的经验和心得整理成文分享出来,既能帮助他人也能加深自己对知识的理解。 总之,成为一名优秀的JSP程序员需要扎实的技术功底以及持续的学习态度。希望上述内容能对你有所帮助,在未来的...

    XSS-Cheat-Sheet-2019-Edition-2 翻译版本

    XSS-Cheat-Sheet-2019-Edition是一份关于XSS攻击的详细指南,由网络安全专业人士Rodolfo Assis(别名BruteLogic)整理,提供了一个XSS攻击的概念验证的综合方法。这份文件为网络安全专家、学生和爱好者提供了一系列...

    suyan-ms:面试翻译汇总

    面试中可能会涉及Vue的基础知识,如模板语法、组件、响应式系统、虚拟DOM、生命周期钩子、路由管理(如Vue Router)以及状态管理(如Vuex)等。 在【压缩包子文件的文件名称列表】中,我们看到"suyan-ms-main"。这...

    liulb-docs:本人收集和翻译的文档合集

    【标题】"liulb-docs:本人收集和翻译的文档合集" 涵盖的是作者liulb整理和翻译的各种技术文档的集合。这个合集可能包含了他在IT领域,尤其是JavaScript方向上的深入研究和理解,对于学习者来说是一份宝贵的资源。 ...

    基于PHP的7x8Y中英文对照词典(php爬虫).zip

    由于涉及到跨语言的翻译,可能还涉及到了自然语言处理(NLP)的一些基础知识,如词汇匹配、翻译模型等。 【标签】"php" 指出此项目的核心技术是PHP,这是一门广泛应用于Web开发的服务器端脚本语言。在本项目中,PHP...

    设计开发助理岗位职责.pdf

    + 负责与开发设计中心有关的对外邮件来往、对外文件上的翻译工作 + 各类文件的起草、发放、登记、记录等工作 + 安排开发设计中心国外顾问公司的日常工作、时间表和行程安排 + 安排国外公司的招投标标书的发放、...

    设计开发助理岗位职责.docx

    2. 负责与开发设计中心有关的对外邮件来往、对外文件上的翻译工作。 3. 各类文件的起草、发放、登记、记录等工作。 4. 安排开发设计中心国外顾问公司的日常工作、时间表和行程安排。 5. 安排国外公司的招投标标书的...

    JSP与XML与Servlet帮助

    JSP的执行过程分为三个阶段:翻译、编译和执行。首先,服务器会将JSP页面转换为一个Servlet源码文件,然后编译成Servlet类,最后执行Servlet来响应客户端请求。 **XML(eXtensible Markup Language)** XML是一种...

    rokomari:来自Rokomari.com的boimela 2015的所有书籍信息的检索器

    它可能是用编程语言实现的,用于爬取、整理和检索该书展的相关书籍数据。 **描述详解:** "罗科马里"是Rokomari.com的中文翻译,这是一个在孟加拉国知名的在线书店。"Rokomari.com提供的boimela 2015的所有书籍...

    Twitter - Replace bookmarks with likes-crx插件

    它们通常是由第三方开发者创建的,可以安装在Chrome、Firefox、Safari等浏览器上,以提供额外的功能,如广告拦截、隐私保护、网页翻译等。在这个案例中,"Twitter - Replace bookmarks with likes-crx" 是一个专为...

    24款非常有用的 jQuery 插件分享

    通过提供简化的DOM操作、动画效果、事件处理以及与Ajax的简便集成,jQuery极大地提升了网站的可用性和用户体验。因此,一个网站如果能有效地利用jQuery及其插件,往往能够在用户心中留下深刻的印象。 以下是根据所...

Global site tag (gtag.js) - Google Analytics