我常用的javascript方法

來源:互聯網
上載者:User

  在這裡記一下,怕以後找不到了
  (不斷添加中。。。)
  
 1. 獲得元素大小和位置
  function getElementPosition(element) {
    var result = new Object();
    result.x = 0;
    result.y = 0;
    result.width = 0;
    result.height = 0;
    if (element.offsetParent) {
        result.x = element.offsetLeft;
        result.y = element.offsetTop;
        var parent = element.offsetParent;
        while (parent) {
            result.x += parent.offsetLeft;
            result.y += parent.offsetTop;
            var parentTagName = parent.tagName.toLowerCase();
            if (parentTagName != "table" &&
                parentTagName != "body" &&
                parentTagName != "html" &&
                parentTagName != "div" &&
                parent.clientTop &&
                parent.clientLeft) {
                result.x += parent.clientLeft;
                result.y += parent.clientTop;
            }
            parent = parent.offsetParent;
        }
    }
    else if (element.left && element.top) {
        result.x = element.left;
        result.y = element.top;
    }
    else {
        if (element.x) {
            result.x = element.x;
        }
        if (element.y) {
            result.y = element.y;
        }
    }
    if (element.offsetWidth && element.offsetHeight) {
        result.width = element.offsetWidth;
        result.height = element.offsetHeight;
    }
    else if (element.style && element.style.pixelWidth && element.style.pixelHeight) {
        result.width = element.style.pixelWidth;
        result.height = element.style.pixelHeight;
    }
    return result;
}

2. 簡單封裝的xmlhttp
var HSL = new Object();
HSL.Ajax = new Object();

HSL.Ajax.READY_STATE_UNINITIALIZED = 0;
HSL.Ajax.READY_STATE_LOADING = 1;
HSL.Ajax.READY_STATE_LOADED = 2;
HSL.Ajax.READY_STATE_INTERACTIVE = 3;
HSL.Ajax.READY_STATE_COMPLETE = 4;

HSL.Ajax.Request = function(url, params, oncomplete, onerror)
{
  this.url = url;
  this.params = params;
  this.req = null;
  this.oncomplete = oncomplete;
  this.onerror = (onerror) ? onerror : this.defaultError;
  this.sendRequest(url);
}

HSL.Ajax.Request.prototype =
{
  sendRequest : function(url)
  {
    if(window.XMLHttpRequest)
    {
      this.req = new XMLHttpRequest();
    }
    else if(window.ActiveXObject)
    {
      this.req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if(this.req)
    {
      try
      {
        var sender = this;
        this.req.onreadystatechange = function()
        {
          sender.onReadyState.call(sender);
        }
        this.params = this.params + "&t=" + (new Date()).getTime();
        this.req.open("GET", url + "?" + this.params, true);
        this.req.send(null);
      }
      catch(err)
      {
        this.onerror.call(this);
      }
    }
  },
 
  onReadyState : function()
  {
    var req = this.req;
    var ready = req.readyState;
    if(ready == HSL.Ajax.READY_STATE_COMPLETE)
    {
      var httpStatus = req.status;
      if(httpStatus == 200 || httpStatus == 0)
      {
        this.oncomplete.call(this, req.responseText);
      }
      else
      {
       this.onerror.call(this);
      }
    }
  },
  defaultError : function()
  {
    //alert("Callback error!");
    return;
  }
}

3.獲得url後面帶的參數
function getArgs()
        {
          var args = new Object();
          var query = location.search.substring(1);
          var pairs = query.split('&');
          for(var i=0; i<pairs.length; i++)
          {
            var pos = pairs[i].indexOf('=');
            if(pos == -1)
              continue;
            var argname = pairs[i].substring(0,pos);
            var value = pairs[i].substring(pos+1);
            args[argname] = decodeURIComponent(value);
          }
          return args;
        }

  使用:
  http://www.test.aspx?id=55&name=test
  var args = getArgs();
  alert(args["id"]);

  在論壇上也看到更加簡便的方法,利用Regex
 function getQueryString(url,key)
{
  var reg = new RegExp(".*?"+ key+"=([^&]*)?&.*?$"+"|.*?"+key+"=([^&]*)?$|");

  if(reg.exec(url) == url) return "";
  return url.replace(reg,"$1$2");
}
  var url = document.location.toString();
  alert(getQueryString(url,"id"));

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.