H5-JavaScript(五) 充实文档的内容 JavaScript&Dom - DOM艺术2nd Chapter8
一、自己做自己的事情
web 页面的主要数据结构: HTML 来呈现
web 样式:CSS
web 动态变动的内容: Javascript
理论上 JavaScript 可以对一个空的web 页面,动态生成所有 Html 标签和样式,但是我们不应该样做
牢记两个原则:
1、渐进增强: 个人觉得不恰当,应该叫:谁的功能谁做,且各自功能最大限度地保持独立
2、平稳退化: 支持低版本
二、三个例子:
2.1 显示缩略语列表
HTML:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>充实文档中的内容</title> 6 <link rel="stylesheet" href="styles/typography.css"> 7 </head> 8 <body> 9 <h1>What is the Document Object Model?</h1> 10 <p> 11 The <abbr title="World wide Web Consortium">W3C</abbr> defines the <abbr title="Document Object Model">DOM</abbr> 12 </p> 13 <blockquote cite="http://www.3c.org/DOM/"> 14 <p> 15 A plateform and language-neutral interface that will allow programs content,structure and style of documents. 16 </p> 17 </blockquote> 18 <p> 19 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="eXtensive Markup Language">XML</abbr> documents. 20 </p> 21 <script src="js/addLoadEvent.js"></script> 22 <script src="js/displayAbbreviation.js"></script> 23 </body> 24 </html>
CSS:
1 body { 2 font-family: "Helvetica","Arial",sans-serif; 3 font-size: 10pt; 4 } 5 abbr { 6 text-decoration: none; 7 border: 0; 8 font-style: normal; 9 }
JavaScript:
1 function displayAbbreviation() { 2 //兼容性考虑 3 if (!document.getElementsByTagName || !document.createElement || !document.createTextNode) 4 return false; 5 6 //1.得到所有缩略词 text & title 属性 7 var abbrNodes = document.getElementsByTagName("abbr"); 8 if (abbrNodes.length < 1) return false; 9 var abbrs = new Array(); 10 for (var i = 0; i < abbrNodes.length; i++) { 11 var definition = abbrNodes[i].getAttribute("title"); 12 var key = abbrNodes[i].firstChild.nodeValue; 13 abbrs[key] = definition; 14 } 15 //2.创建自定义列表,文档中加入自定义列表 16 var dlist = document.createElement("dl"); 17 for (key in abbrs) { 18 var definition = abbrs[key]; 19 //创建dt 20 var dt = document.createElement("dt"); 21 var dt_text = document.createTextNode(key); 22 dt.appendChild(dt_text); 23 //创建dd 24 var dd = document.createElement("dd"); 25 var dd_text = document.createTextNode(definition); 26 dd.appendChild(dd_text); 27 //加入dl中 28 dlist.appendChild(dt); 29 dlist.appendChild(dd); 30 } 31 var caption = document.createElement("h1"); 32 var caption_text = document.createTextNode("Abbreviation"); 33 caption.appendChild(caption_text); 34 35 document.body.appendChild(caption); 36 document.body.appendChild(dlist); 37 38 } 39 addLoadEvent(displayAbbreviation); //之前文档中已经写过,次数不赘述
效果图:

2.2显示文献来源
1 function displayCitations() { 2 var quotes = document.getElementsByTagName("blockquote"); 3 //遍历所有blockquote 4 for (var i = 0; i < quotes.length; i++) { 5 if (!quotes[i].getAttribute("cite")) continue; 6 var url = quotes[i].getAttribute("cite"); 7 //找到blockquote 中的最后一段 8 var quoteChildren = quotes[i].getElementsByTagName("*"); 9 if(quoteChildren.length<1) continue; 10 var elem = quoteChildren[quoteChildren.length-1]; 11 //创建标记 12 var link = document.createElement("a"); 13 link.setAttribute("href",url); 14 var link_text = document.createTextNode("source"); 15 link.appendChild(link_text); 16 17 var superscript = document.createElement("sup"); 18 superscript.appendChild(link); 19 //注入html 中 20 elem.appendChild(superscript); 21 } 22 } 23 addLoadEvent(displayCitations);
效果图

2.3显示快捷键清单
HTML: 加入了一个ul
JavaScript:
1 function displayAccesskeys() { 2 //健壮性 3 if (!document.getElementsByTagName || !document.createElement || !document.createTextNode) 4 return false; 5 //获取导航栏的所有内容 6 var links = document.getElementsByTagName("a"); 7 var akeys = new Array(); 8 for (var i = 0; i < links.length; i++) { 9 var current_link = links[i]; 10 if (!current_link.getAttribute("accesskey")) continue; 11 key = current_link.getAttribute("accesskey"); 12 akeys[key] = current_link.lastChild.nodeValue; 13 } 14 //定义一个ul 15 var ul = document.createElement("ul"); 16 for (key in akeys) { 17 var li = document.createElement("li"); 18 var text = document.createTextNode(key + ": " + akeys[key]); 19 li.appendChild(text); 20 ul.appendChild(li); 21 } 22 //注入html 23 var body = document.getElementsByTagName("body")[0]; 24 var caption = document.createElement("h1"); 25 var text = document.createTextNode("AccessKeys"); 26 caption.appendChild(text); 27 body.appendChild(caption); 28 body.appendChild(ul); 29 } 30 addLoadEvent(displayAccesskeys);
效果图:

三、总结
三个例子雷同点:
1、代码扩展性
2、找页面中的元素保存有用信息
3、新建节点: 3.1 靠效果图得出 3.2 利用2 中的信息建立Element TextNode 3.3 关联关系建立
4、HTML中注入 新建的节点
四、补充
 
 
                    
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号