才子小窝

天生我才必有用,千金散尽还复来

« [转]深入认识javascript中的eval函数Mac系统下Safari浏览器测试页面 »

扩展DOM层的控制开关

才子很多年前就写过一个层的模糊控制开关函数,用来模糊控制指定层的显示与否。
PS:所谓模糊控制是指,当一个层的显示与否未知的情况下,触发这个函数时,被指定的层,原本是显示的变为不显示,而原本不显示的变为显示,才子称其为模糊控制,汗,这种名称都被才子想得出来,晕一下。

原函数如下:

function viewnone(e){
  var obj = document.getElementById(e);
  obj.style.display=(obj.style.display=="none")?"":"none";
}

调用方法就指定一个ID号即可,如:

<div id="testDiv1">这里是层1</div>
<input type="button" value="层的开关" onclick="viewnone('testDiv1');" />

非常简单,通过取得指定DOM层的ID,获得一个对象,取其style.display的属性值并加以修改,如原本为none,即不显示时,将其值修改为"",即取消了不显示,就变为显示;如原本就是没有display的属性值,也就是原本是显示出来的,则修改其属性值为none,变为不显示。
函数简单高效,符合HTML DOM,所有浏览器均有效。

但今天做一个页面,需要指定某个层的显示与否,是明确指定,就算原本是显示的,触发一个函数仍然是显示,反之也一样。那么上面这个函数就显示不适合了,本来想重新编写一个函数来控制的,想想没什么必要,干脆直接在原函数上修改一下就行了,于是就有了下面这个函数:

function viewnone(e){
  var obj = document.getElementById(e);
  obj.style.display=(obj.style.display=="none")?"":"none";
  if (arguments.length == 2) {
    if (arguments[1]=="show") {
      obj.style.display="";
    } else if (arguments[1]=="hide") {
      obj.style.display="none";
    }
  }
}

调用时还需要再指定一个明确的开关了,如:

<div id="testDiv2">这里是层2</div>
<input type="button" value="关闭层2" onclick="viewnone('testDiv2','hide');" />
<input type="button" value="打开层2" onclick="viewnone('testDiv2','show');" />

大家看到只是加了几行而已,没有修改原函数的名字及参数,直接用arguments的特性做了一下扩展,arguments表示参数的集合,与数组非常类似,同样有下标,也是用arguments[n]这样的形式进行访问,下次再专门写篇关于arguments与Array(数组)方面的文章再做进一步探讨,这里就不多介绍了。
上面这个修改后的函数,就添加了几行代码,通过取得arguments的长度来判断是否有指定层的开关,如果arguments长度为2,表示引入的参数有两个,第一个不用多,就是DOM的层ID,而第二个参数就是明确指定的开关值,其值有两个:分别为showhide,就是通过判断这个参数的值来明确指定层的显示与否,后面的代码相信不用多解释大家也都应该明白意思了。

还有疑问的请看详细的使用范例:
http://www.54caizi.org/demo/javascript-viewnone.html

风流才子 作品,转帖请保留原文地址链接,谢谢合作!
才子小窝http://www.54caizi.org

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新评论及回复

最近发表


Copyright 2008-? 才子小窝. Some Rights Reserved. 
粤ICP备08040021号  网站地图