一些常用js函数

最近整理了一些常用js函数,都比较简单实用,复杂的关于原型扩展的方法暂时没写,毕竟会污染到全局对象,当然也可以先判断其原型方法是否已经扩展没有的话再进行添加,这个已经有人实现。

这些函数都是自己在实际应用中常用的,以后可能会随时添加新的方法或者补充完善,等时机成熟再来搞一个类库,话说JavaScript大牛们一般都有自己的类库,传说的重复造轮子,虽不及prototype,yui,jQuery,dojo那样的大型全面强大的类库但也能够自己在项目中使用,也有人说轮子造多了可以造火车 ....

View Code
/*
author:hot
createDate:2010-10-21
update:2010-11-10
some normal JavaScript functions
*/

function getEl(selecter){//简易选择器,可以选择id,css,tag标签
switch(typeof selecter){
case 'string':
if(/^#([\w-]+)$/.test(selecter))//匹配id选择器
return document.getElementById(selecter.replace('#',''));
else if(/^\.([\w-]+)$/.test(selecter)){//匹配css选择器,返回数组集合
if(document.getElementsByClassName)
return document.getElementsByClassName(selecter.replace('.',''));
else{//以下兼容ie5.5
var allEl=document.all?document.all:document.documentElement.getElementsByTagName("*"),result=[];
for(var i=0,len=allEl.length;i<len;i++){
if((' '+allEl[i].className+' ').indexOf(' '+selecter.replace('.','')+' ')!=-1)
result.push(allEl[i]);
}
return result;
}
}
else if(/^([\w-]+)$/.test(selecter))//匹配标签选择器
return document.getElementsByTagName(selecter).length==0?null:document.getElementsByTagName(selecter);
else
return null;
case 'object'://对象直接返回
return selecter;
default:return null;
}
}
function children(el){//el的孩子节点
if(!el)return null;
if(el.nodeType == 1){
var children = el.childNodes,arr=[];
if(children.length > 0){
for(var i=0;i<children.length;i++){
if(children[i].nodeType == 1)
arr.push(children[i]);
}
return arr;
}
else
return null;
}
}
function siblings(el){//el的兄弟节点nodelist
if(!el)return null;
if(el.nodeType == 1){
var child = children(el.parentNode),arr=[];
if(child.length > 1){
for(var i=0;i<child.length;i++){
if(child[i] != el)
arr.push(child[i]);
}
return arr;
}
else
return null;
}
}
function nextnode(el){ //el的下一个兄弟节点
if(!el)return null;
if(el.nextSibling)
return el.nextSibling.nodeType == 1?el.nextSibling:arguments.callee(el.nextSibling);
else
return null;
}
function prevnode(el){ //el的上一个兄弟节点
if(!el)return null;
if(el.previousSibling)
return el.previousSibling.nodeType == 1?el.previousSibling:prevnode(el.previousSibling);
else
return null;
}
function outerHtml(el){//el的outerHtml
if(!el)return null;
var par = document.createElement('div'),outer;
document.body.appendChild(par);
par.appendChild(el);
outer
= par.innerHTML;
document.body.removeChild(par);
return outer;
}
function inText(el,con){//el的innerText
if(!el)return null;
if(con)
el.innerText
?el.innerText=con:el.textContent=con;
else
return el.innerText?el.innerText:el.textContent;
}
function addClass(el,cl){//增加样式cl
if(!el)return null;
el.className
+= ' '+cl;
}
function removeClass(el,cl){//去掉样式cl
if(!el)return null;
var cn = ' '+el.className.replace(/^\s*|\s*$/ig,'')+' ';//trim方法
el.className = cn.replace(' '+cl+' ','');
}
function hasClass(el,cl){//判断el是否有cl这个class
if(!el)return ;
return (' '+el.className+' ').indexOf(' '+cl+' ')==-1;
}
function contain(el,parent){//父节点是否包含子节点
if(!el||!parent)return ;
if(el.parentNode==null)
return false;
else
return el.parentNode==parent?true:arguments.callee(el.parentNode,parent);
}
function addEvent(el,type,fn){ //绑定事件
if(el.attachEvent) {
el[
'e'+type+fn] = fn; //IE下拷贝元素引用,使this指向el对象而不是window
el[type+fn] = function(){el['e'+type+fn](window.event);}
el.attachEvent(
'on'+type, el[type+fn]);
}
else
el.addEventListener(type, fn,
false);
}
function stopEvent(e){//阻止触发默认事件
e = e || window.event;
if(e.preventDefault) {
e.preventDefault();
e.stopPropagation();
}
else{
e.returnValue
= false;
e.cancelBubble
= true;
}
}
function cancelBubble(e){//阻止事件冒泡
e = e || window.event;
e.stopPropagation
?e.stopPropagation():e.cancelBubble = true;
}
function stopSelect(){//阻止浏览器默认选取功能
window.getSelection?window.getSelection().removeAllRanges():document.selection.empty();
}
function removeEvent(el,type,fn){//移除绑定
return el.detachEvent?el.detachEvent('on'+type,fn):el.removeEventListener(type, fn, false);
}
function hover(el,fnOver, fnOut){//鼠标滑过函数
if(!el)return null;
addEvent(el,
'mouseover',fnOver);
addEvent(el,
'mouseout',fnOut);
}
function position(el){//dom节点的绝对位置
if(el&&el.nodeType == 1)
return {'left':el.getBoundingClientRect().left+document.documentElement.scrollLeft,'top':el.getBoundingClientRect().top+document.documentElement.scrollTop+el.offsetHeight};
}
function getStyle(el,styleName){//获取当前样式属性
if(el.currentStyle)//ie
return el.currentStyle[styleName];
else{ //ff
var arr=el.ownerDocument.defaultView.getComputedStyle(el, null);
return arr[styleName];
}
}
function domReady(fn){
var isReady=false;
function fire(){
if(isReady)return;
isReady
=true;
fn();
}
if(document.addEventListener) {
document.addEventListener(
'DOMContentLoaded',function(){
document.removeEventListener(
'DOMContentLoaded', arguments.callee, false);
fn();
//简单处理函数执行,没有做队列处理机制
},false);
}
else if(document.attachEvent){
document.attachEvent(
'onreadystatechange',function(){
if(document.readyState === 'complete'){
document.detachEvent(
'onreadystatechange', arguments.callee);
fire();
}
});
if(document.documentElement.doScroll&&window == window.top)(function(){//这段代码总是会执行两次,很头痛
if(isReady)return;
try{
document.documentElement.doScroll(
"left");
}
catch( error ){
setTimeout(arguments.callee,
0);
return;
}
fire();
})();
}
}
var xhr=(function(){
return window.ActiveXObject?new ActiveXObject('Microsoft.XMLHTTP'):new XMLHttpRequest();
})();
function clone(o) { //对象深度复制
if(!o || 'object' !== typeof o)
return o;
if('function' === typeof o.clone)
return o.clone();
var c = '[object Array]' === Object.prototype.toString.call(o) ? [] : {};
var p, v;
for(p in o){
if(o.hasOwnProperty(p)) {
v
= o[p];
if(v && 'object' === typeof v)
c[p]
= clone(v);
else
c[p]
= v;
}
}
return c;
}
function isString(obj){//判断是否为字符串
return typeof obj === 'string';
}
function isArray(obj){//判断是否为数组
return toString.call(obj) === '[object Array]';
}
function isFunction(obj){//判断是否为函数
return toString.call(obj) === '[object Function]';
}
function addFavorite(vrl,name){//添加到收藏夹
if(document.all)
window.external.addFavorite(vrl,name);
else if(window.sidebar)
window.sidebar.addPanel(name,vrl,
'');
}
function setHome(obj,vrl){//设为主页
try{
obj.style.behavior
='url(#default#homepage)';
obj.setHomePage(vrl);
}
catch(e){
if(window.netscape) {
try {
netscape.security.PrivilegeManager.enablePrivilege(
"UniversalXPConnect");
}
catch (e) {
alert(
"此操作被浏览器拒绝!\n请在浏览器地址栏输入“about:config”并回车\n然后将 [signed.applets.codebase_principal_support]的值设置为'true',双击即可。");
}
var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
prefs.setCharPref(
'browser.startup.homepage',vrl);
}
}
}
var browser = (function(){//百度有啊 浏览器版本判断
var ua = navigator.userAgent.toLowerCase();
var b = {
msie:
/msie/.test(ua) && !/opera/.test(ua),
opera:
/opera/.test(ua),
safari:
/webkit/.test(ua) && !/chrome/.test(ua),
firefox:
/firefox/.test(ua),
chrome:
/chrome/.test(ua)
};
var vMark = '';
for(var i in b) {
if(b[i]) { vMark = /(?:opera|safari)/.test(i) ? 'version' : i; break; }
}
b.version
= vMark && RegExp('(?:' + vMark + ')[\\/: ]([\\d.]+)').test(ua) ? RegExp.$1 : 0;
b.ie
= b.msie;
b.ie6
= b.msie && parseInt(b.version) == 6;
b.ie7
= b.msie && parseInt(b.version) == 7;
b.ie8
= b.msie && parseInt(b.version) == 8;
return b;
})();
function copy2Clipboard(txt){//复制文本内容 到剪贴板
if(window.clipboardData){
window.clipboardData.clearData();
window.clipboardData.setData(
"Text",txt);
}
else if(navigator.userAgent.indexOf("Opera")!=-1)
window.location
=txt;
else if(window.netscape){
try{
netscape.security.PrivilegeManager.enablePrivilege(
"UniversalXPConnect");
}
catch(e){
alert(
"您的firefox安全限制限制您进行剪贴板操作,请打开’about:config’将signed.applets.codebase_principal_support’设置为true’之后重试,相对路径为firefox根目录/greprefs/all.js");
return false;
}
var clip=Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
if(!clip)return;
var trans=Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
if(!trans)return;
trans.addDataFlavor(
'text/unicode');
var str=new Object();
var len=new Object();
var str=Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
var copytext=txt;str.data=copytext;
trans.setTransferData(
"text/unicode",str,copytext.length*2);
var clipid=Components.interfaces.nsIClipboard;
if(!clip)return false;
clip.setData(trans,
null,clipid.kGlobalClipboard);
}
}

如果有好心的朋友发现代码中的bug,还望及时指出,谢谢!

上面outerHtml方法改为

function outerHtml(el){//el的outerHtml
if(!el)return null;
var self
= el.cloneNode(true)
var par
= document.createElement('div'),outer;
document.body.appendChild(par);
par.appendChild(self);
outer
= par.innerHTML;
document.body.removeChild(par);
return outer;
}

posted @ 2010-10-26 16:18  冰封e族  阅读(423)  评论(0编辑  收藏  举报