Javascript DOM 编程实例讲解--仿LightBox效果提示框(3)

作者:海啸 来源:无忧脚本 时间:2008-05-01 13:25:00 

DOM的基本操作--查找节点

好了,我们上面介绍了NodeType,那么我们要怎么才能知道某个节点(Node)的类型呢?我们可以Element.NoteType来获得节点的类型。不过你看到了,在这里我们首先要做的是获得这个Element先。

下面我们就来介绍一下几种获取节点的方法--document.getElementById(elementId)\document.getElementsByTagName(tagName)\document.getElementsByName.

docment.getElementById(elementId)方法:它返回的是以ID为表示的节点,而大家都知道id在页面中是唯一的,所以getElementById是在页面中搜索DOM节点最直接的方法,很常用。

现在就来看看我们这个提示框的代码吧(终于回到我们的实例了,差点还以为要去写一本书了,^-^):


我们看到:

var btnShow = document.getElementById("btnshow");
if(!btnShow) return false;     
btnShow.disabled=true;

我们就通过document.getElementById("btnshow")获得了“显示信息层”这个节点,呵呵,再让我们回到上面的nodetype,我们用NodeType方法来看看这个节点是什么类型吧,我们要这么写:


/***** 
   IE浏览器要7.0 才支持nodeType属性,所以我上面才给出了那段枚举所
   有节点类型的代码,以方便在低版本的IE浏览器中判断节点类型。
*****/   
alert(btnShow.nodeType); 

看看我们得到了什么?

图三

1,对照上面给的nodetype的代码:1代表Element Node。当然按钮是个元素节点。再来验证下上面提到的在文档中的关系吧:parent(父)、child(子)、sibling(兄弟)

怎么查询节点的父节点,我们使用element.parentNode来获得父节点,看看这个代码

alert(btnShow.parentNode.tagName);

看看我们又得到了什么?


 

图四

BODY!呵呵,对啊这个按钮的父亲节点就是body,看看我们的代码就知道了:

<body>
<input name="btnshow" id="btnshow" type="button" onclick="CreateDiv()" value="显示信息层" />
</body>

那么我们来看看这个按钮有没有子节点呢,我们使用element.hasChildNodes()方法来判断它是否有子节点。代码我们这么写:

alert(btnShow.hasChildNodes());


 

图五

false,当然是false,因为按纽是没有子节点的。

接着我们再来查找下他的兄弟节点吧,我们使用element.nextSibling()方法来获得兄弟(邻居)节点,而我们这里的代码这么写:

alert(btnShow.nextSibling.nodeType);


 

图六

3?什么意思?呵呵,说明下我的这个图是在firefox中获取的,在firefox中会把换行的空格作为一个textNode处理,所以btnShow.nextSibling.nodeType我们获得节点类型就是3了。所以要做兼容Firefox的DOM编程开发时,要调用nextSibling方法时,在写XHTML代码时,有时候是需要在同一样写两个兄弟节点的,代码如下:

// ul作为btnShow的兄弟节点,需要紧接在<input />标签后写
<input name="btnshow" id="btnshow" type="button" onclick="CreateDiv()" value="显示信息层" /><ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>

讲到现在,我们所接触的这些方法都是获取单个的节点,那么怎样获取一组节点呢?现在就要隆重介推出document.getElementsByTagName()

getElementsByTagName:(核心[XML]DOM)用来返回一个包含所有tagName(标签名)特性等于某个指定值的元素的NodeList。还是用一段代码来看看,它是怎么工作的吧:




我们首先用getElementById找到id为newslist的节点(UL),然后用getElementsByTagName("li")就获得了UL下的全部LI元素Lines了。我们看到了,Lines是一个数组,我们就可以通过一个循环来获得每一个li的内容。这个也是我们使用getElementsByTagName的一个很常用的方法。

怎么样?现在知道怎么查找一个节点了、怎么获取一组元素、如何判断一个节点的类型、怎么查找一个节点的parentNode(父节点)、判断节点是否有子节点和怎么来获得节点的下一个兄弟节点。那现在我们就运用刚才学习的东西,对节点的操作做个扩展,看看下面的代码:



// 获取el节点内tag标签样式为name样式索引为size的DOM节点
function getElByClassName(tag,name,size,el){
         if(!document.getElementsByTagName) return false;
         
         var el=(el)?el:document;
         var itm=el.getElementsByTagName(tag);
         var num=1;
         
         for(i=0;i<itm.length;i++){
             if(itm[i].className===name&&size===num){
                  return itm[i];
             }
             else if(itm[i].className===name){
                  num++;
             }
         }
         return false;
}

标签:lightbox,dom,编程,javascript
0
投稿

猜你喜欢

  • 从浏览器想开去

    2008-07-29 12:52:00
  • Python笔记之观察者模式

    2023-04-05 18:37:20
  • Python3 类型标注支持操作

    2021-12-25 05:39:41
  • 35个Python编程小技巧

    2023-08-23 21:23:50
  • Python常用编译器原理及特点解析

    2021-09-04 05:10:11
  • pandas多层索引的创建和取值以及排序的实现

    2023-07-09 23:12:54
  • Go语言并发技术详解

    2024-02-14 16:49:22
  • Python使用sftp实现上传和下载功能(实例代码)

    2023-12-26 09:35:41
  • Python数据结构之双向链表的定义与使用方法示例

    2023-06-29 06:20:45
  • PDO::beginTransaction讲解

    2023-06-06 00:57:46
  • MySQL 索引和数据表该如何维护

    2024-01-26 18:35:16
  • Python下singleton模式的实现方法

    2022-10-03 12:15:02
  • Python实现排序方法常见的四种

    2022-02-18 08:06:15
  • 解读MaxPooling1D和GlobalMaxPooling1D的区别

    2023-07-21 10:54:43
  • 如何实现文件上传并自动归类功能?

    2010-05-24 18:37:00
  • 程序员开发项目是选择效率还是质量呢?

    2023-09-17 08:37:03
  • Python可视化函数plt.scatter详解

    2023-07-02 17:54:01
  • Python+Pygame实现代码雨动画效果

    2023-12-03 18:43:57
  • Python中list列表的一些进阶使用方法介绍

    2023-12-24 10:31:47
  • 比较一下看看自己掌握了多少SQL快捷键

    2009-01-04 14:04:00
  • asp之家 网络编程 m.aspxhome.com