DOM动态创建标记实例

野性酷女 2022-06-07 02:16 246阅读 0赞

本文实例来源于《JavaScript DOM编程艺术(第二版)》第8章
知识点可参考上一篇博客《DOM动态创建标记》,地址:http://blog.csdn.net/ruirui_1996/article/details/78158925








目录

1.实例描述
2.创建“缩略语列表”函数
3.创建“文献来源链接”函数
4.创建“快捷键清单”函数







1.实例描述

这里写图片描述
有这样一个网页,HTML代码如下:

  1. <h1>What is the Document Object Model?</h1>
  2. <p>The
  3. <abbr title="World Wide Web Consortium">W3C</abbr>
  4. defines the
  5. <abbr title="Document Object Model">DOM</abbr>
  6. as:
  7. </p>
  8. <blockquote cite="http://www.w3.org/DOM/">
  9. <p>
  10. A plantform- and language-neutral interface that will allow programs and scripts to dynamically access and
  11. update the content,structure and style of documents.
  12. </p>
  13. </blockquote>
  14. <p>
  15. It is an <abbr title="Application Programming Interface">API</abbr>
  16. that can be used to navigate <abbr title="HyperText Markup Language">HTML</abbr> and <abbr title="eXtensible Markup Language">XML</abbr> documents.
  17. </p>

我们可以看到这段文本包含大量的缩略语,用<abbr>标签把他们识别出来了







2.创建“缩略语列表”函数

在页面中,如果能把<abbr>标签和其中的title属性值单独提取出来,并放到一个列表里显示在页面上可能会更好,就比如下面这个效果:
这里写图片描述
那么如果要运用dom来实现上面的效果,首先可以先把预想效果的代码“准备”出来:
这里写图片描述
最上面还有一个h1标签。
接下来分析一下实现的步骤:
上一篇文章说过,用DOM来插入一个元素分为两个步骤,一是创建一个新的元素,如使用createElement,二是把这个新元素插入节点树,如使用appendChild。那么在这个实例中,情况可能稍微会复杂一点。
首先我们可以先创建一个h1标签,再用createTextNode方法为其添加文字,接着传入到页面(也可以和后面的dl标签一起传入)。
接下来创建dl标签,用getElementsByTagName方法找到代码中所有的abbr标签并用for循环来遍历,在循环中,获取abbr标签的title值(用getAttribute方法),获取到中间的文字(节点的方法),可以将这两个值保存在一个数组中,数组的下标是中间的文字,对应的值是title值。
遍历数组,每循环一个创建一个dt标签,并传入数组的下标;创建一个dd标签,传入下标对应的值,在将这些加到dl标签中。
此时整体dl标签虽然内容已经全部导入完成,但仍处于游离状态,最后将dl传入到body末尾即可(document.body表示整个body部分)。
所以综上,还是那两个步骤:创建新元素、插入到节点树。只不过在反复的运用。
创建一个函数displayAbbreviations,将上述过程实现,代码如下:

  1. function displayAbbreviations() {
  2. //创建H1标签及内容
  3. var oH1 = document.createElement("h1");
  4. var h1_text = document.createTextNode("Abbreviations");
  5. oH1.appendChild(h1_text);
  6. document.body.appendChild(oH1);
  7. //创建dl标签及内容
  8. var oDl = document.createElement("dl");
  9. var oAbbr = document.getElementsByTagName("abbr");
  10. var str = [];
  11. for (var i = 0; i < oAbbr.length; i++) {
  12. var text = oAbbr[i].getAttribute("title");
  13. var context = oAbbr[i].lastChild.nodeValue;
  14. str[context] = text;
  15. }
  16. for (var key in str) {
  17. var oDt = document.createElement("dt");
  18. var oDd = document.createElement("dd");
  19. var oDt_text = document.createTextNode(key);
  20. var oDd_text = document.createTextNode(str[key]);
  21. oDt.appendChild(oDt_text);
  22. oDd.appendChild(oDd_text);
  23. oDl.appendChild(oDt);
  24. oDl.appendChild(oDd);
  25. }
  26. document.body.appendChild(oDl);
  27. }

在书中,对这个函数进行了一些兼容性的改进:

  1. 首先检查函数中运用的DOM方法浏览器是否支持
  2. 创建一个window.onoad事件来执行函数
  3. 由于低版本的IE不能识别abbr标签,所以需保证displayAbbreviations函数能够平稳退化

实现第一点:在函数中加:

  1. if(!document.getElementsByTagName||!document.createElement||!document.createTextNode) return false;

window.onoad事件:

  1. function addLoadEvent(f) {
  2. var oldonload = window.onload;
  3. if (typeof window.onload != 'function') {
  4. window.onload = f;
  5. } else {
  6. window.onload = function () {
  7. oldonload();
  8. f();
  9. }
  10. }
  11. }

实现第三点:

  • 在获取title和文本值前面加:if(oAbbr[i].Childnode<1) continue;
  • 此时将不会生成任何一个dt和dl标签,所以在函数最后加:if (oDl.childNodes.length < 1) return false;






3.创建“文献来源链接”函数

在HTML代码中,我们可以看到这样几句:

  1. <blockquote cite="http://www.w3.org/DOM/">
  2. <p>
  3. A plantf......ents.
  4. </p>
  5. </blockquote>

blockquote标签中的cite属性后面的网址告诉了我们该段文字的出处,但是在页面中浏览器无法显示出来,所以我们可以运用DOM来将其显示在页面上。
最终效果如图:
这里写图片描述
代码如下:

  1. function displayCitations() {
  2. var oBlock = document.getElementsByTagName("blockquote");
  3. for (var i = 0; i < oBlock.length; i++) {
  4. var newBlock = oBlock[i];
  5. var url = newBlock.getAttribute("cite");
  6. var oP = newBlock.getElementsByTagName("*");
  7. var _oP = oP[oP.length - 1];
  8. }
  9. var oA = document.createElement("a");
  10. var a_text = document.createTextNode("sourse");
  11. oA.appendChild(a_text);
  12. oA.setAttribute("href", url);
  13. _oP.appendChild(oA);
  14. }

改进同上







4.创建“快捷键清单”函数

accesskey属性可以把一个元素(如链接)与键盘上的某个特定按键关联在一起,一些基本的快捷键都有约定俗成的设置办法,如:

accesskey=”1”对应着一个“返回到本网站主页”的链接
accesskey=”2”对应着一个“后退到前一页面”的链接
accesskey=”4”对应着一个“打开本网站的搜索表单/页面”的链接
accesskey=”9”对应着一个“本网站联系办法”的链接
accesskey=”0”对应着一个“查看本网站的快捷清单”的链接

如把网站导航加入到页面,可在HTML中加入以下代码:

  1. <ul>
  2. <li><a href="index.html" accesskey="1">Home</a></li>
  3. <li><a href="search.html" accesskey="4">Search</a></li>
  4. <li><a href="contact.html" accesskey="9">Content</a></li>
  5. </ul>

发表评论

表情:
评论列表 (有 0 条评论,246人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Dom创建XML

    DOM是Document Object Model的缩写,即文档对象模型。前面说过,XML将数据组织为一颗树,所以DOM就是对这颗树的一个对象描叙。通俗的说,就是通过解析XML