常用js代码

1.网页上获得元素的绝对位置

经常要用到的方法,其实很简单,使用 obj.offsetLeft和obj.offsetTop是获得相对父元素的位置,所以只要遍历dom树就可以获得正确的位置了。有时候需要在html控件上覆盖一个div,这种情况下就可以用到了,代码如下:

  1. function findPos(obj) {
  2.     var curleft = curtop = 0;
  3.     if (obj.offsetParent) {
  4.        do {
  5.            curleft += obj.offsetLeft;
  6.            curtop += obj.offsetTop;
  7.        } while (obj = obj.offsetParent);
  8.     }
  9.     return [curleft,curtop];
  10. }
代码来自《ppk on javascript》这本书 :-)

2. ie中select的innerHtml无效的解决方法
  1. var oSelect = document.createElement("select");
  2. var oOption = document.createElement("option");
  3. var oTextNode=document.createTextNode('test');
  4. oOption.value=0;
  5. oOption.appendChild(oTextNode);
  6. oSelect.appendChild(oOption);
  7. document.getElementById('yourid').appendChild(oSelect);
3.动态载入js

直接在dom里面插入一个<script>节点是不行的,可能在本地写程序的时候发现不了。因为直接插入<script>节点,浏览器会下载这个js文件,但是网络有延时,如果你需要在dom里面插入一个js后立即执行某个跟这个js文件有关的函数(一般的程序都会有这个需求的),那么会报错,解决这个问题,方法就是用ajax载入。下面是代码,前面两个函数是别人写的,我加了两个函数,其中callback就是要加载完成js后要执行的函数。


  1. var lajax={};
  2. var __count__ = 0;
  3. lajax.getXmlHttp = function(){
  4.     var xmlHttp = null;
  5.     try {
  6.         xmlHttp = new XMLHttpRequest();
  7.     } 
  8.     catch (e) {
  9.         var progIds = ['MSXML2.XMLHTTP''Microsoft.XMLHTTP''MSXML2.XMLHTTP.5.0'
  10.                       , 'MSXML2.XMLHTTP.4.0'
  11.                       , 'MSXML2.XMLHTTP.3.0'];
  12.         var success = false;
  13.         for (var iterator = 0; (iterator < progIds.length) && (!success); iterator++) {
  14.             try {
  15.                 xmlHttp = new ActiveXObject(progIds[iterator]);
  16.                 success = true;
  17.             } 
  18.             catch (e) {
  19.             }
  20.         }
  21.         if (!success) {
  22.             return null;
  23.         }
  24.     }
  25.     return xmlHttp;
  26. };

  27. lajax.sendRequest = function(method,url,requestData,callBack)
  28. {
  29.     var xmlHttp = lajax.getXmlHttp();
  30.     xmlHttp.open(method,url,true);    
  31.     if (method=="POST") xmlHttp.setRequestHeader('Content-type''application/x-www-form-urlencoded');
  32.     xmlHttp.onreadystatechange = function()
  33.     {
  34.         if (xmlHttp.readyState == 4) {
  35.             if (xmlHttp.status == 200) {
  36.                 callBack(xmlHttp);
  37.             }
  38.         }
  39.     }
  40.     if (method=="POST") xmlHttp.send(requestData);
  41.     else xmlHttp.send(null);
  42. lajax.loadJS = function(jsPath, callBack) {
  43. var _callBack = function(xmlHttp) {
  44.    __count__++;
  45.    _includeJS("js" + __count__, xmlHttp.responseText);
  46.    callBack();
  47. }
  48. lajax.sendRequest('GET',jsPath, null, _callBack);
  49. }

  50. function _includeJS(sId, source) { 
  51.      if (( source != null ) && (!document.getElementById(sId))){ 
  52.          var oHead = document.getElementsByTagName('HEAD').item(0); 
  53.          var oScript = document.createElement( "script" ); 
  54.          oScript.language = "javascript"
  55.          oScript.type = "text/javascript"
  56.          oScript.id = sId; 
  57.          oScript.defer = true
  58.          oScript.text = source; 
  59.          oHead.appendChild(oScript); 
  60.      }
  61. }
4.ie6中css伪类hover无效的解决方法


这个无效的bug已经在ie7中修复,但是毕竟现在用ie6的人还不少,所以还是要需要兼容一下,代码如下:


先是js,当传入的obj为0的时候函数什么都不做,下面有例子:

  1. <script language="javascript">
  2. function pointToMenu(obj) {
  3.    if(obj == 0) {
  4.     return;
  5.    }
  6.    obj.className='current';
  7. }
  8. function pointOutMenu(obj) {
  9.    if(obj == 0) {
  10.     return;
  11.    }
  12.    obj.className='normal';
  13. }
  14. </script>
html代码:

  1. <ul class="head-list">
  2. <li class="current"
  3.      onMouseOver="pointToMenu(0)"
  4.      onMouseOut="pointOutMenu(0)"
  5. ><a href="index.php"><span>菜单一</span></a></li>
  6. <li class="normal"
  7.      onMouseOver="pointToMenu(this)"
  8.      onMouseOut="pointOutMenu(this)"
  9. ><a href="catalog.php?catalog_id=1"><span>菜单二</span></a></li>
  10. </ul>

css样式表我就省略的要怎么样的样式可以自己定义



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值