使用DOM方法在文档中检索或添加信息的方法以及example代码
来源:互联网 发布:linux usr local 编辑:程序博客网 时间:2024/06/07 18:09
本文来自学习JavaScript DOM编程艺术一书时的笔记和总结等。
1、需要对文档中现有信息进行检索时,以下DOM方法最有用:
- getElementById
- getElementByTagName
- getAttribute
2、需要把信息添加到文档中去时,以下DOM方法最有用:
- createElement
- createTextNode
- appendChild
- insertBefore
- setAttribute
3、JS使用的注意事项
- JavaScript脚本只应该用来充实文档的内容,要避免使用DOM技术来创建核心内容
- 利用上述技术可以为文档生成一份目录,把文档里的h1和h2元素提取出来放入一份清单,再将其插入到文档的开头。甚至可以继续提供些增强功能,为用户提供可以快速到达各有关标题的内部链接
4、一个应用上述DOM技术的js使用样例
(1)HTML标记文件explanation.html
<!DOCTYPE html><html lang="en"><head> <meta charset="utf-8" /> <title>Explaining the Document Object Model</title> <link rel="stylesheet" media="screen" href="styles/typography.css" /> <script type="text/javascript" src="scripts/addLoadEvent.js"></script> <script type="text/javascript" src="scripts/displayAbbreviations.js"></script> <script type="text/javascript" src="scripts/displayCitations.js"></script> <script type="text/javascript" src="scripts/displayAccesskeys.js"></script></head><body> <h1>What is the Document Object Model?</h1> <p>The <abbr title="World Wide Web Consortium">W3C</abbr> defines the <abbr title="Document Object Model">DOM</abbr> as: </p> <blockquote cite="http://www.w3.org/DOM/">; <p>A platform- and language-neutral interface that will allow programs and scripts to dynamically access and update the content, structure and style of documents. </p> </blockquote> <p>It is an <abbr title="Application Programming interface">API</abbr> that can be used to navigate <abbr title="HyperText Markup Language">HTML</abbr> and <abbr title="eXtensible Markup Language">XML</abbr> documents. </p> <ul id="navigation"> <li><a href="index.html" accesskey="1">Home</a></li> <li><a href="search.html" accesskey="4">Search</a></li> <li><a href="contact.html" accesskey="0">Contact</a></li> </ul></body></html>
(2)提供浏览器打开页面时自动加载函数功能的addLoadEvent.js
function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function() { oldonload(); func(); } }}
(3)把文档里的缩略语显示为一个缩略语列表的displayAbbreviations.js
function displayAbbreviations() { //把文档里的缩略语显示为一个缩略语列表 //DOM元素功能函数的兼容性判断 if (!document.getElementsByTagName || !document.createElement || !document.createTextNode) return false; //取得缩略词 var abbreviations = document.getElementsByTagName("abbr"); if (abbreviations.length < 1) return false; var defs = new Array(); //遍历所有缩略词 for (var i=0; i<abbreviations.length; i++) { var current_abbr = abbreviations[i]; //ie6不支持abbr元素,在统计abbr元素的子节点时总是会返回一个0,这里进行了兼容处理,避免ie6去执行并不支持的DOM方法 if (current_abbr.childNodes.length < 1) continue; var definition = current_abbr.getAttribute("title"); var key = current_abbr.lastChild.nodeValue; defs[key] = definition; } //创建定义列表 var dlist = document.createElement("dl"); //遍历数组defs for (key in defs) { var definition = defs[key]; //创建定义标题 var dtitle = document.createElement("dt"); var dtitle_text = document.createTextNode(key); dtitle.appendChild(dtitle_text); //创建定义描述 var ddesc = document.createElement("dd"); var ddesc_text = document.createTextNode(definition); ddesc.appendChild(ddesc_text); //把它们添加到定义列表 dlist.appendChild(dtitle); dlist.appendChild(ddesc); } //当存在浏览器兼容性问题而没有正常生成dlist定义列表数据时,直接退出函数,避免发生兼容问题 if (dlist.childNodes.length < 1) return false; //创建标题 var header = document.createElement("h2"); var header_text = document.createTextNode("Abbreviations"); header.appendChild(header_text); //把标题添加到页面主体 document.body.appendChild(header); //把定义列表也添加到页面主体 document.body.appendChild(dlist);}addLoadEvent(displayAbbreviations);
(4)为把文档里引用的每段文献节选生成一个文献来源链接的displayCitations.js
function displayCitations() { //函数功能为把文档里引用的每段文献节选生成一个文献来源链接 //DOM元素方法针对低版本浏览器的兼容性检查 if (!document.getElementsByTagName || !document.createElement || !document.createTextNode) return false; //取得所有引用 var quotes = document.getElementsByTagName("blockquote"); //遍历引用 for (var i=0; i<quotes.length; i++) { //如果没有cite属性则继续循环 if (!quotes[i].getAttribute("cite")) continue; //保存cite属性 var url = quotes[i].getAttribute("cite"); //取得引用中的所有元素节点 var quoteChildren = quotes[i].getElementsByTagName('*'); //如果没有元素节点,则继续循环 if (quoteChildren.length < 1) continue; //取得引用中的最后一个元素节点 //这里不能使用元素的lastChild方法,因为在html标记文件blockquote元素中的最后一个子元素后的回车符可能被部分浏览器识别为一个元素,而导致错误 var elem = quoteChildren[quoteChildren.length - 1]; //创建标记 var link = document.createElement("a"); var link_text = document.createTextNode("source"); link.appendChild(link_text); link.setAttribute("href",url); var superscript = document.createElement("sup"); superscript.appendChild(link); //把标记添加到引用中的最后一个元素节点 elem.appendChild(superscript); }}addLoadEvent(displayCitations);
(5)把文档所支持的快捷键显示为一份快捷键清单的displayAccesskeys.js
function displayAccesskeys() { //把文档所支持的快捷键显示为一份快捷键清单 if (!document.getElementsByTagName || !document.createElement || !document.createTextNode) return false; //取得文档中的所有链接 var links = document.getElementsByTagName("a"); //创建一个数组,保存访问键 var akeys = new Array(); //遍历链接 for (var i=0; i<links.length; i++) { var current_link = links[i]; //如果没有accesskey属性则继续循环 if (!current_link.getAttribute("accesskey")) continue; //取得access的值 var key = current_link.getAttribute("accesskey"); //取得链接文本 var text = current_link.lastChild.nodeValue; //添加到数组 akeys[key] = text; } //创建列表 var list = document.createElement("ul"); //遍历访问键 for (key in akeys) { var text = akeys[key]; //创建放到列表项中的字符串 var str = key + ": " + text; //创建列表项 var item = document.createElement("li"); var item_text = document.createTextNode(str); item.appendChild(item_text); //把列表项添加到列表中 list.appendChild(item); } //创建标题 var header = document.createElement("h3"); var header_text = document.createTextNode("Accesskeys"); header.appendChild(header_text); //把标题加到页面主体中 document.body.appendChild(header); //把列表添加到页面主体 document.body.appendChild(list);}addLoadEvent(displayAccesskeys);
(6)本样例中使用的CSS文件typography.css
body { font-family: "Helvetica","Arial",sans-serif; font-size: 10pt;}abbr { text-decoration: none; border: 0; font-style: normal;}
阅读全文
0 0
- 使用DOM方法在文档中检索或添加信息的方法以及example代码
- C#中使用DOM解析XML文档的方法
- 动态添加的dom方法,调用angular中$scope方法
- Android在代码中添加一个Button的方法
- 在C中添加汇编代码的方法
- DOM中setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。
- python安装MySQLdb:在windows下或linux下(以及eclipse中pydev使用msqldb的配置方法)
- 在代码中关闭autocad文档后立即删除文档的方法
- 网络信息检索的方法和技巧
- 网络信息检索的方法和技巧
- 使用DOM方法来遍历一个文档
- Android设置圆形组件以及在组件中设置图标或文字的2中方法
- Android开发过程中在sh,py,mk文件中添加log信息的方法
- Android开发过程中在sh,py,mk文件中添加log信息的方法
- Android 签名打包出现的错误的解决方法以及代码中获取应用签名信息方法
- 浅谈在Delphi中Dll调试方法以及怎样在Dll中使用数据模块DataModule(或表单Form)
- Keil MDK使用J-LINK分别在Sram,Nor Flash以及Sdram中调试代码的原理和方法
- 在RichEdit中插入Bitmap/GIF动画以及获取这些元素的信息的方法
- [Spring]Bean相关问题
- c语言经典例题3
- Hadoop生态系统
- hdoj-1251统计难题(字典树)
- 爬取猫眼电影网经典电影TOP100信息Markdown效果展示
- 使用DOM方法在文档中检索或添加信息的方法以及example代码
- 解决Linux Terminal在被拖动时产生Ctrl+C的问题
- LeetCode#98. Validate Binary Search Tree
- github开源项目地址
- HTML 里面的图片怎么移动位置?
- Softlink & Hardlink
- 字符串查找算法BF和KMP
- Digit Generator—UVa1583
- 网络流之最大流