javascript常用工具函数汇总

虽然jquery能简单的实现选取元素的功能,但有时候使用原生的javascript可以使得页面更简洁和效率更高,下面对一些常用的javascript 代码做了汇总:

1. 选取dom节点元素

  • 使用元素的Id来获取元素
  • 1   function get(element){
    2  2 
    3  3     if(typeof element === "string"){
    4  4 
    5  5       element = document.getElementById(element);
    6  6 
    7  7     }
    8  9     return element;
    9  11   } 

     

  • 使用元素的className获取元素
 1 function getByClass(className, tag){
 2     tag = tag||document;
 3     className = className||'*';
 4     var findarr = [];
 5     if(document.getElementsByClassName){
 6         return document.getElementsByClassName(className);
 7     }
 8     el = document.getElementsByTagName(tag);
 9     var pattern = new RegExp("(^|\\s)" + className + (\\s|$)");
10     for(var i=0; i<el.length; i++){
11         if(pattern.test(el[i].className)){
12             findarr.push(el[i]);
13         }
14     }
15 }

2. 从html字符串创建dom节点:

 

1 var toElement = function(){
2     var div = d.createElement('div');
3     return function(html){
4         div.innerHTML = html;
5         var el = div.childNodes[0];
6         div.removeChild(el);
7         return el;
8     }
9 }();

 

3. 操作class函数

 

 1  //判断class是否存在
 2  function hasClass(ele , cls){
 3    return ele.className.match(new RegExp(‘(\\s|^)’+cls+'(\\s|$)'));               
 4  }
 5 
 6 //给元素增加指定的类
 7 function addClass(ele, cls){
 8   if(!hasClass(ele,cls)){
 9   ele.className += " "+cls;  
10 }  
11 }
12 
13 //删除指定名字的类
14 function removeClass(ele , cls){
15    var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
16    ele.className = ele.className.replace(reg, " ");
17 }

4. 获取 xmlhttpRequest 对象

 1 var getXhr = function(){
 2     var xhr;
 3     
 4     return function(){
 5         if (xhr) return xhr;
 6                 
 7         if (typeof XMLHttpRequest !== 'undefined') {
 8             xhr = new XMLHttpRequest();
 9         } else {
10             var v = [
11                 "Microsoft.XmlHttp",
12                 "MSXML2.XmlHttp.5.0",
13                 "MSXML2.XmlHttp.4.0",
14                 "MSXML2.XmlHttp.3.0",
15                 "MSXML2.XmlHttp.2.0"                    
16             ];
17             
18             for (var i=0; i < v.length; i++){
19                 try {
20                     xhr = new ActiveXObject(v[i]);
21                     break;
22                 } catch (e){}
23             }
24         }             
25 
26         return xhr;
27     }
28 }();

5. 获取文件名或文件后缀

 

 1 //从路径中获取文件名
 2 
 3 function fileFromPath(file){
 4   return file.replace(/.*(\/|\\)/,"");  
 5 }
 6 
 7 //获取文件后缀
 8 function getExt(file){
 9     return (/[.]/.exec(file)) ? /[^.]+$/.exec(file.toLowerCase()) : '';
10 }

 

6. 获取元素相对于浏览器窗口偏移

 1 //Ie7 下获取缩放因子
 2  function GetZoomFactor () {
 3             var factor = 1;
 4             if (document.body.getBoundingClientRect) {
 5                     // rect is only in physical pixel size in IE before version 8 
 6                 var rect = document.body.getBoundingClientRect ();
 7                 var physicalW = rect.right - rect.left;
 8                 var logicalW = document.body.offsetWidth;
 9 
10                     // the zoom level is always an integer percent value
11                 factor = Math.round ((physicalW / logicalW) * 100) / 100;
12             }
13             return factor;
14         }
//对于支持getBoundingClientRect()属性的浏览器
15 function getOffsetRect(elem){ 16 var zoom = GetZoomFactor(); 17 var box = elem.getBoundingClientRect(), 18 body = document.body, 19 docElem = document.documentElement, 20 scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop, 21 scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft, 22 clientTop = docElem.clientTop || body.clientTop || 0, 23 clientLeft = docElem.clientLeft || body.clientLeft || 0, 24 top = box.top/zoom + scrollTop/zoom - clientTop, 25 left = box.left/zoom + scrollLeft/zoom -clientLeft; 26 return {top:Math.round(top),left:Math.round(left)} 27 }
//对于不支持该属性的
28 function getOffsetSum(elem){ 29 var top = 0, left = 0; 30 do { 31 top += el.offsetTop || 0; 32 left += el.offsetLeft || 0; 33 } 34 while (el = el.offsetParent); 35 36 return { 37 left: left, 38 top: top 39 }; 40 } 41 function getOffset(elem){ 42 if(elem.getBoundingClientRect){ 43 getOffsetRect(elem) 44 } else{ 45 getOffsetSum(elem) 46 } 47 }

7. 获取鼠标相对页面的坐标

 1 function getMouseCoords(e){        
 2     // pageX/Y is not supported in IE
 3     // http://www.quirksmode.org/dom/w3c_cssom.html            
 4     if (!e.pageX && e.clientX){
 5         // In Internet Explorer 7 some properties (mouse coordinates) are treated as physical,
 6         // while others are logical (offset).
 7         var zoom = 1;    
 8         var body = document.body;
 9         
10         if (body.getBoundingClientRect) {
11             var bound = body.getBoundingClientRect();
12             zoom = (bound.right - bound.left)/body.clientWidth;
13         }
14 
15         return {
16             x: e.clientX / zoom + d.body.scrollLeft + d.documentElement.scrollLeft,
17             y: e.clientY / zoom + d.body.scrollTop + d.documentElement.scrollTop
18         };
19     }
20     
21     return {
22         x: e.pageX,
23         y: e.pageY
24     };        
25 
26 }

 8. 将一个字符串解析成xml 对象

 1 function toXML(str){
 2             var doc = null;
 3             if(window.ActiveXObject){
 4                 doc = new ActiveXObject('Microsoft.XMLDOM');
 5                 doc.async = false;
 6                 doc.loadXML(str);
 7             }else{
 8                 doc = (new DOMParser()).parseFromString(str,'text/xml');
 9             }
10             return doc;
11 }

 

 

 

 

 

posted @ 2013-09-12 15:46  嘻哈披头士  阅读(134)  评论(0)    收藏  举报