启点main.js工具函数库解析:字符串处理与DOM操作

作者:代码拾荒

时间:2026-10-23

浏览:187

本文详细解析启点网站main.js中的核心工具函数。内容涵盖String原型的trim、len及format方法实现,StringBuilder类的封装,以及GetCookie与SetCookie的完整读写逻辑。此外,还解析了基于IE兼容性的$选择器、日期计算、表单回车提交及动态弹窗控制等实用前端技巧。

文章目录

字符串处理与格式化工具

String.prototype.trim = function() {


{

return this.replace(/(^\s*)|(\s*$)/g, "");


}

String.prototype.len=function() {


{

return this.replace(/[^\x00-\xff]/g,'aa').length;


} 

function StringBuilder(value) {


{

this.strings = new Array("");


this.append(value);


}

// Appends the given value to the end of this instance.


StringBuilder.prototype.append = function (value) {


{

if (value) {


    {

this.strings.push(value);


    }
}

// Clears the string buffer


StringBuilder.prototype.clear = function () {


{

this.strings.length = 1;


}

// Converts this instance to a String.


StringBuilder.prototype.toString = function () {


{

return this.strings.join("");


}

//string format prototype


// sample: var test="my name is {0} {2} " ;


// alert(test.format('liang','zhonghua');


if (!String._FORMAT_SEPARATOR){


String._FORMAT_SEPARATOR = String.fromCharCode(0x1f);


String._FORMAT_ARGS_PATTERN = new RegExp('^[^' + String._FORMAT_SEPARATOR + ']*'


+ new Array(100).join('(?:.([^' + String._FORMAT_SEPARATOR + ']*))?'));


    }

if (!String.format)


    {

String.format = function (s){


return Array.prototype.join.call(arguments, String._FORMAT_SEPARATOR).


replace(String._FORMAT_ARGS_PATTERN, s);


        }
    }

if (!''.format)


    {

String.prototype.format = function (){


return (String._FORMAT_SEPARATOR +


Array.prototype.join.call(arguments, String._FORMAT_SEPARATOR)).


replace(String._FORMAT_ARGS_PATTERN, this);


    }
}

//end string format



Cookie读写与登录状态检查

function checkLoginByCookie() {


{

var cookieId="AUTHTEST";


if(window.location.href.toLowerCase().indexOf("qidian.com") > -1)


    {

cookieId="cmfuToken";


    }

if((GetCookie(cookieId)!=null && GetCookie(cookieId).length > 0 ))


    {

return true;


    }

else


    {

if(GetCookie('cmfu_al') != null && GetCookie('cmfu_al').length > 0)


        {

return true;


        }
    }

return false;


}

URL参数解析与DOM选择器封装

function getUrlParam(name) {


{   

var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)","i");


var r = window.location.search.substr(1).match(reg);


if (r!=null)


    {

return unescape(r[2]);


    }

else


    {  

return null;


    }
}  

function $(objName) {


{

if(document.getElementById)


    {

return document.getElementById(objName );


    }

else if(document.layers)


    {

return eval("document.layers['" + objName +"']");


    }

else


    {

return eval('document.all.' + objName);


    }
}

日期计算与浏览器兼容性处理

function DateAdd(BaseDate, interval, DatePart) {


{

var dateObj = new Date(BaseDate.replace("-",","));


var millisecond=1;


var second=millisecond*1000;


var minute=second*60;


var hour=minute*60;


var day=hour*24;


var year=day*365;



var newDate;


var dVal = new Date(dateObj)


var dVal=dVal.valueOf();


switch(DatePart) {


 {

case "ms": newDate=new Date(dVal+millisecond*interval); break;


case "s": newDate=new Date(dVal+second*interval); break;


case "mi": newDate=new Date(dVal+minute*interval); break;


case "h": newDate=new Date(dVal+hour*interval); break;


case "d": newDate=new Date(dVal+day*interval); break;


case "y": newDate=new Date(dVal+year*interval); break;


default: return escape("日期格式不对");


 }

newDate = new Date(newDate);


return newDate.getFullYear() + "-" + (newDate.getMonth() + 1) + "-" + newDate.getDate() ;


}

//增加当前日期的天数


Date.prototype.AddDays=function (interval) {


{

var dateObj = this;


var millisecond=1;


var second=millisecond*1000;


var minute=second*60;


var hour=minute*60;


var day=hour*24;


var year=day*365;



var newDate;


var dVal = new Date(dateObj)


var dVal=dVal.valueOf();



newDate=new Date(dVal+day*interval);



newDate = new Date(newDate);


return newDate


}

function SetCookie(name, value) {


{

var argv = SetCookie.arguments;



var argc = SetCookie.arguments.length;



var expires = (argc > 2) ? argv[2].toGMTString() : (new Date()).AddDays(30).toGMTString();;



var path = (argc > 3) ? argv[3] : "/";



var domain = (argc > 4) ? argv[4] : null;



var secure = (argc > 5) ? argv[5] : false;



   

var content = name + "=" + escape(value) + ";";


if(expires != null)


    {

content += " expires=" + expires + ";";


    }

if(path != null)


    {

content += " path=" + path + ";";


    }

if(domain != null)


    {

content += " domain=" + domain + ";";


    }

    

document.cookie = content;




}

function GetCookie(cookieName) {


{

var cookieString = document.cookie;



var start = cookieString.indexOf(cookieName + '=');



    

// 加上等号的原因是避免在某些 Cookie 的值里有


// 与 cookieName 一样的字符串。



if (start == -1) // 找不到


return null;



start += cookieName.length + 1;


var end = cookieString.indexOf(';', start);


if (end == -1) return unescape(cookieString.substring(start));


return unescape(cookieString.substring(start, end));


}


表单交互与弹窗控制逻辑

/*文本框得到焦点*/


function TextBoxOnFocus(txtControl,strDefaultText) {


{

if (txtControl.value==strDefaultText)


txtControl.value="";


}

/*文本框失去焦点*/


function TextBoxOnBlur(txtControl,strDefaultText) {


{

if (txtControl.value.replace(/(^[\s]*)|([\s]*$)/g,"")=="")


txtControl.value=strDefaultText;


}


/*功能:弹出群发消息窗口*/


function MultiSendWin(subject,content) {


{

var win =window.open(uploadURL+"?subject=" + subject + "&content=" +content,"","menubar=no,width=480,height=550,resizeable=no","");


return false;


}


/*功能:弹出留言窗口


function SpaceSendMsg(toUserId) {


{

var win =window.open(spaceSendMsgURL+"?toUserId=" + toUserId,"","menubar=no,width=500,height=400,resizeable=no","");


return false;


}
*/

function ShowServerMessage(result) {


{

eval(result.value);


}

//回车提交表单


function KeydownSubmitForm(btnId) {


{

var btn=document.getElementById(btnId);


if (btn!=null&& event.keyCode== 13)


    {

event.returnValue=false;


event.keyCode=9;


btn.click();


    }  
}  

//ReadChapter -抵用券js


function MDown(Object){


Obj=Object.id


document.all(Obj).setCapture()


pX=event.x-document.all(Obj).style.pixelLeft;


pY=event.y-document.all(Obj).style.pixelTop;


}

function MMove(){


if(Obj!=''){


document.all(Obj).style.left=event.x-pX;


document.all(Obj).style.top=event.y-pY;


    }
}

function MUp(){


if(Obj!=''){


document.all(Obj).releaseCapture();


Obj='';


    }
}

//关闭抵用券信息


function LayerClose(divDiscount) {


document.getElementById(divDiscount).style.visibility="hidden";


}

//显示抵用券信息


function LayerShow(divDiscount,discountPrize) {


var prizeUI = document.getElementById(divDiscount);


prizeUI.style.left = screen.width-530;


prizeUI.style.top = screen.Height - 480;


prizeUI.style.visibility="visible";



document.getElementById("lblPrize1").innerHTML=discountPrize;


document.getElementById("lblPrize2").innerHTML=discountPrize;


window.setInterval("LayerClose('" + divDiscount + "')",15000);


}

//帮助masterpage用


function HideMenu(menuid) {


{

var obj = document.getElementById(menuid);


if(obj.style.display == "none")


    {

obj.style.display = "";


    }

else


    {

obj.style.display = "none";


    }

if(obj.style.display == "")


    {

var tmpId = "M0";


for(var i = 1 ; i <= 9; i++)


        {

var myid = tmpId + i;


if(myid != menuid)


            {

document.getElementById(myid).style.display = "none";


            }
        }
    }
}

登录弹窗与滚动定位实现

/* div login */


function ShowLoginDiv() {


{

var builder = new StringBuilder();


builder.append("<table border='0' cellpadding='0' cellspacing='0'>");


builder.append("<tr class='TitleTR'>");


builder.append("<td align='left'>");


builder.append("登录");


builder.append("</td>");


builder.append("<td align='right'>");


builder.append("<span title='关闭' onclick='HideLoginMask();'>×</span>");


builder.append("</td>");


builder.append("</tr>");


builder.append("<tr>");


builder.append("<td colspan='2'>");


builder.append("<iframe src='/DivUserLogin.aspx' width='225px' height='125px' name='loginFrame' ");//src=''"


builder.append("id='loginFrame' frameborder='0' scrolling='no'></iframe>");


builder.append("</td>");


builder.append("</tr>");


builder.append("</table>");


//window.top.scrollTo(0,0);


document.getElementById("DivMask").style.height=document.body.scrollHeight;


document.getElementById("DivMask").style.width=document.body.scrollWidth;


document.getElementById("DivMask").style.display = 'block';


document.getElementById("DivLogin").style.display = "block";


document.getElementById("DivLogin").innerHTML = builder.toString();


ScrollDiv();


window.onscroll=ScrollDiv;


window.onresize=ScrollDiv;


window.onload=ScrollDiv;


} 

function HideLoginMask() {


{

document.getElementById("DivMask").style.display="none";


document.getElementById("DivLogin").style.display="none";


}        

/*随屏幕滚动*/


function ScrollDiv() {


{

if($("DivLogin"))


  {

document.getElementById("DivLogin").style.top=(document.body.scrollTop+


(document.body.clientHeight-document.getElementById("DivLogin").offsetHeight)/2)+"px";



document.getElementById("DivLogin").style.left=(document.documentElement.scrollLeft+


(document.body.clientWidth-document.getElementById("DivLogin").offsetWidth)/2)+"px";



   }

if($("AddMark"))


  {

// if(!event )


// return;



$("AddMark").style.top=document.body.clientHeight + document.body.scrollTop-200


$("AddMark").style.left=document.body.clientWidth-56;


$("AddMark").style.display='';



// (document.body.clientHeight-$("AddMark").offsetHeight)/2)+"px";


if($("MonthVoteTip"))


   {

//$("MonthVoteTip").style.top=document.body.scrollTop+document.body.clientHeight-$("MonthVoteTip").offsetHeight+"px";


$("MonthVoteTip").style.top = getPosition($("AddMark")).y - $("AddMark").offsetHeight + "px";


   }
  }

}

function AutoScroll() {


{

window.onscroll=ScrollDiv;


window.onresize=ScrollDiv;


window.onload=ScrollDiv;


}

function getPosition(el) {


{

for (var lx=0,ly=0;el!=null;lx+=el.offsetLeft,ly+=el.offsetTop,el=el.offsetParent);


return {x:lx,y:ly}


}

字符串截取与收藏功能封装

/* 2007-11-28 XuJian */


//截取字符串 包含中文处理


//(串,长度,增加...)


function subString(str, len, hasDot) {


{

var newLength = 0;


var newStr = "";


var chineseRegex = /[^\x00-\xff]/g;


var singleChar = "";


var strLength = str.replace(chineseRegex,"**").length;


for(var i = 0;i < strLength;i++)


    {

singleChar = str.charAt(i).toString();


if(singleChar.match(chineseRegex) != null)


        {

newLength += 2;


        }    

else


        {

newLength++;


        }

if(newLength > len)


        {

break;


        }

newStr += singleChar;


    }

if(hasDot && strLength > len)


    {

newStr += "...";


    }

return newStr;


}

/* 2007-10-26 14:20 Get String Lenth(include chinese character) */


function GetStringLength(strObj) {


{

return strObj.replace(/[^\x00-\xff]/g,"**").length;


}

function addMark(title,url) {


try{


if (window.sidebar) {


window.sidebar.addPanel(title, url,"");


} else if( document.all ) {


window.external.AddFavorite( url, title);


} else if( window.opera && window.print ) {


return true;


}

}catch(e)


{

alert("您的浏览器安全设置不允许该项操作")


}
}

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章