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 }

浙公网安备 33010602011771号