??xml version="1.0" encoding="utf-8" standalone="yes"?>
"^[0-9]*[1-9][0-9]*$" //正整?nbsp;
"^((-\d+)|(0+))$" //非正整数Q负整数 + 0Q?nbsp;
"^-[0-9]*[1-9][0-9]*$" //负整?nbsp;
"^-?\d+$" //整数
"^\d+(\.\d+)?$" //非负点敎ͼ正QҎ(gu) + 0Q?nbsp;
"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正QҎ(gu)
"^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正点敎ͼ负QҎ(gu) + 0Q?nbsp;
"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //负QҎ(gu)
"^(-?\d+)(\.\d+)?$" //点?nbsp;
"^[A-Za-z]+$" //?6个英文字母组成的字符?nbsp;
"^[A-Z]+$" //?6个英文字母的大写l成的字W串
"^[a-z]+$" //?6个英文字母的写l成的字W串
"^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符?nbsp;
"^\w+$" //由数字?6个英文字母或者下划线l成的字W串
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // q???/span>
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // ??q?/span>
"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil
"(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?" //?sh)话L
"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$" //IP地址
匚w中文字符的正则表辑ּQ?[\u4e00-\u9fa5]
匚w双字节字W?包括汉字在内)Q[^\x00-\xff]
匚wI的正则表辑ּQ\n[\s| ]*\r
匚wHTML标记的正则表辑ּQ?<(.*)>.*<\/\1>|<(.*) \/>/
匚w首尾I格的正则表辑ּQ?^\s*)|(\s*$)
匚wEmail地址的正则表辑ּQ\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匚w|址URL的正则表辑ּQ^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$
匚w帐号是否合法(字母开_允许5-16字节Q允许字母数字下划线)Q^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匚w国内?sh)话LQ?\d{3}-|\d{4}-)?(\d{8}|\d{7})?
匚w腾讯QQP^[1-9]*[1-9][0-9]*$
下表是元字符及其在正则表辑ּ上下文中的行为的一个完整列表:
\ 下一个字W标Cؓ一个特D字W、或一个原义字W、或一个后向引用、或一个八q制转义W?br>
^ 匚w输入字符串的开始位|。如果设|了 RegExp 对象的Multiline 属性,^ 也匹?’\n’ ?’\r’ 之后的位|?
$ 匚w输入字符串的l束位置。如果设|了 RegExp 对象的Multiline 属性,$ 也匹?’\n’ ?’\r’ 之前的位|?
* 匚w前面的子表达式零ơ或多次?
+ 匚w前面的子表达式一ơ或多次? {h(hun)?{1,}?
? 匚w前面的子表达式零ơ或一ơ? {h(hun)?{0,1}?
{n} n 是一个非负整敎ͼ匚w定的n ơ?br>
{n,} n 是一个非负整敎ͼ臛_匚wn ơ?
{n,m} m ?n 均ؓ非负整数Q其中n <= m。最匹?n ơ且最多匹?m ơ。在逗号和两个数之间不能有空根{?br>
? 当该字符紧跟在Q何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面Ӟ匚w模式是非贪婪的。非贪婪模式可能少的匹配所搜烦的字W串Q而默认的贪婪模式则尽可能多的匚w所搜烦的字W串?
. 匚w?"\n" 之外的Q何单个字W。要匚w包括 ’\n’ 在内的Q何字W,请用象 ’[.\n]’ 的模式?
(pattern) 匚wpattern q获取这一匚w?
(?:pattern) 匚wpattern 但不获取匚wl果Q也是说这是一个非获取匚wQ不q行存储供以后用?
(?=pattern) 正向预查Q在M匚w pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_该匹配不需要获取供以后使用?
(?!pattern) 负向预查Q与(?=pattern)作用相反
x|y 匚w x ?y?
[xyz] 字符集合?
[^xyz] 负值字W集合?
[a-z] 字符范围Q匹配指定范围内的Q意字W?
[^a-z] 负值字W范_匚wM不在指定范围内的L字符?
\b 匚w一个单词边界,也就是指单词和空格间的位|?br>
\B 匚w非单词边界?
\cx 匚w由x指明的控制字W?
\d 匚w一个数字字W。等价于 [0-9]?
\D 匚w一个非数字字符。等价于 [^0-9]?
\f 匚w一个换늬。等价于 \x0c ?\cL?
\n 匚w一个换行符。等价于 \x0a ?\cJ?
\r 匚w一个回车符。等价于 \x0d ?\cM?
\s 匚wMI白字符Q包括空根{制表符、换늬{等。等价于[ \f\n\r\t\v]?
\S 匚wM非空白字W。等价于 [^ \f\n\r\t\v]?
\t 匚w一个制表符。等价于 \x09 ?\cI?
\v 匚w一个垂直制表符。等价于 \x0b ?\cK?
\w 匚w包括下划U的M单词字符。等价于’[A-Za-z0-9_]’?
\W 匚wM非单词字W。等价于 ’[^A-Za-z0-9_]’?
\xn 匚w nQ其?n 为十六进制{义倹{十六进制{义值必Mؓ定的两个数字长?br>
\num 匚w numQ其中num是一个正整数。对所获取的匹配的引用?
\n 标识一个八q制转义值或一个后向引用。如?\n 之前臛_ n 个获取的子表辑ּQ则 n 为后向引用。否则,如果 n 为八q制数字 (0-7)Q则 n Z个八q制转义倹{?
\nm 标识一个八q制转义值或一个后向引用。如?\nm 之前臛_有is preceded by at least nm 个获取得子表辑ּQ则 nm 为后向引用。如?\nm 之前臛_?n 个获取,?n Z个后跟文?m 的后向引用。如果前面的条g都不满Q若 n ?m 均ؓ八进制数?(0-7)Q则 \nm 匹配八q制转义?nm?
\nml 如果 n 为八q制数字 (0-3)Q且 m ?l 均ؓ八进制数?(0-7)Q则匚w八进制{义?nml?
\un 匚w nQ其?n 是一个用四个十六q制数字表示的Unicode字符?
匚w中文字符的正则表辑ּQ?[u4e00-u9fa5]
匚w双字节字W?包括汉字在内)Q[^x00-xff]
应用Q计字W串的长度(一个双字节字符长度?QASCII字符?Q?/p>
String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;}
匚wI的正则表辑ּQn[s| ]*r
匚wHTML标记的正则表辑ּQ?<(.*)>.*</1>|<(.*) />/
匚w首尾I格的正则表辑ּQ?^s*)|(s*$)
应用Qjavascript中没有像vbscript那样的trim函数Q我们就可以利用q个表达式来实现Q如下:
String.prototype.trim = function()
{
return this.replace(/(^s*)|(s*$)/g, "");
}
利用正则表达式分解和转换IP地址Q?/p>
下面是利用正则表辑ּ匚wIP地址QƈIP地址转换成对应数值的JavascriptE序Q?/p>
function IP2V(ip)
{
re=/(d+).(d+).(d+).(d+)/g //匚wIP地址的正则表辑ּ
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}
不过上面的程序如果不用正则表辑ּQ而直接用split函数来分解可能更单,E序如下Q?/p>
var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是Q?+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
匚wEmail地址的正则表辑ּQw+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
匚w|址URL的正则表辑ּQhttp://([w-]+.)+[w-]+(/[w- ./?%&=]*)?
利用正则表达式去除字串中重复的字W的法E序Q?/p>
var s="abacabefgeeii"
var s1=s.replace(/(.).*1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //l果为:abcefgi
我原来在CSDN上发贴寻求一个表辑ּ来实现去除重复字W的Ҏ(gu)Q最l没有找刎ͼq是我能惛_的最单的实现Ҏ(gu)。思\是用后向引用取出包括重复的字符Q再以重复的字符建立W二个表辑ּQ取C重复的字W,两者串q。这个方法对于字W顺序有要求的字W串可能不适用?/p>
得用正则表达式从URL地址中提取文件名的javascriptE序Q如下结果ؓpage1
s="http://www.9499.net/page1.htm"
s=s.replace(/(.*/){0,}([^.]+).*/ig,"$2")
alert(s)
利用正则表达式限制网表单里的文本框输入内容Q?/p>
用正则表辑ּ限制只能输入中文Qonkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"
用正则表辑ּ限制只能输入全角字符Q?onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"
用正则表辑ּ限制只能输入数字Qonkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
用正则表辑ּ限制只能输入数字和英文:onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
参数Q?br>regex 一个字W串或者你惌与该字符串匹配的正则表达式对?br>params 可选,如果W一个参数是一个字W串Q这里就是传l正则表辑ּ的Q意参敎ͼ'g'无效Q?/p>
CZQ?br>"I like cookies".test("cookie"); // q回true
"I like cookies".test("COOKIE", "i") // 忽略大小? q回true
"I like cookies".test("cake"); // q回false
Ҏ(gu)QtoInt
描述Q解析一个字W串为整?br>q回|如果传入的字W串是以数字Q含正负P开_那么q回相应的整敎ͼ否则q回NoN
CZQ?br>var value = "10px".toInt(); // value的值是10
"+10.5abc".toInt();//q回10
"-10abc".toInt();//q回-10
"a-10b".toInt();//q回NaN
$type("a-10b".toInt());//q回 number
Ҏ(gu)QcamelCase
描述Q去掉一个带q字W的字符串中的连字符Qƈ连字符后面的字母变成大?br>q回|转换后的新字W串实例
CZQ?br>"I-like-cookies".camelCase(); //"ILikeCookies"
Ҏ(gu)QcamelCase
描述Q去掉一个带q字W的字符串中的连字符Qƈ连字符后面的字母变成大?br>q回|转换后的新字W串实例
CZQ?br>"I-like-cookies".camelCase(); //"ILikeCookies"
Ҏ(gu)Qhyphenate
描述Q将一个字W串加连字符Q依据大写字母来分割Q但是如果两个大写字母写一P忽略第二个Q放字符串开头除外)Q中文忽?br>q回|加了q字W后的新字符串实?br>CZQ?br>"ILikeCookies".hyphenate(); //"I-like-cookies"
"IILikeCoBBBAki我es".hyphenate();//"I-iLike-co-bB-bAki我es"
说明Q上面两个函数的应用主要表现在对CSS字符?大部分都含连字符)的支?br>
Ҏ(gu)Qcapitalize
描述Q将字符串中的每个单词{换ؓ大写Q中文忽?br>q回|转换后的新字W串实例
CZQ?br>"i like cookies, 你呢Q?.capitalize(); //"I Like Cookies, 你呢Q?
Ҏ(gu)Qtrim
描述Q裁减掉一个字W串的前后空|含空白字W和一些显CZ出来的特D字W,如\tQ?br>q回|裁减后的新字W串实例
CZQ?br>"\r\n\t i like cookies\t ".trim();//q回"i like cookies"
Ҏ(gu)Qclean
描述Q在trim的基上,对字W串?个以上的I格转换成一个空|说白了就是删除多余的I格Q?br>q回|清除后的新字W串实例
CZQ?br>" i like \t\r\n cookies, hehe \n\n".clean();//q回"i like cookies, hehe"
Ҏ(gu)QrgbToHex
描述Q{换RGBgؓ十六q制|RGB字符串必Lq种形式的格式:"rgb(255,255,255)"?rgba(255,255,255,1)"
参数Q?br>array 布尔|默认为falseQ如果你想用q种形式的数l['FF','33','00']输出Q而不?#FF3300"Q那么你可以讄此参Cؓtrue
q回|十六q制的字W串或者数l,如果输出被设|ؓ字符Ԍ同时rgba的第四个gؓ0Q那么将q回"transparent"
CZQ?br>"rgb(17,34,51)".rgbToHex(); //"#112233"
"rgba(17,34,51,0)".rgbToHex(); //"transparent"
"rgb(17,34,51)".rgbToHex(true); //['11','22','33']
Ҏ(gu)QhexToRgb
描述Q{换十六进刉色gؓRGB|可以不写"#"P颜色支持短颜色型"#ABC"
参数Q?br>array 布尔|默认为falseQ如果你惌出数lŞ式[255,255,255]而不?rgb(255,255,255)"形式Q该参数讄为true
q回|rgb字符串或数组
CZQ?br>"#112233".hexToRgb(); //"rgb(17,34,51)"
"112233".hexToRgb(); //"rgb(17,34,51)"
"123".hexToRgb(); //"rgb(17,34,51)"
"#112233".hexToRgb(true); //[17,34,51]
"112233".hexToRgb(true); //[17,34,51]
"123".hexToRgb(true); //[17,34,51]
shift | 是否按下了SHIFT?/td> |
control | 是否按下了CTRL?/td> |
alt | 是否按下了ALT?/td> |
meta | 是否按下了META?晕一个,META是什么键Q? |
code | 按下键的~码keycode |
page.x | 鼠标相对于整个窗口的 x 偏移位置 |
page.y | 鼠标相对于整个窗口的 y 偏移位置 |
client.x | 鼠标相对于当前视口的 x 偏移位置 |
client.y | 鼠标相对于当前视口的 y 偏移位置 |
key | q个变量记录按下的键盘的写字母Q如'a','w'Q也记录Ҏ(gu)的按键,?#8216;enter’, ‘up’, ‘down’, ‘left’, ‘ right’, ‘space’, ‘backspace’, ‘delete’, ‘esc’. q些Ҏ(gu)键的描述很方?/td> |
target | 事g的目标,如href |
relatedTarget | 事g的关联目?/td> |
明显HTMLQ暗?#8220;公用脚本”
减少web面下蝲旉的关键就是设法减文件大。当多个面q一些成分内Ҏ(gu)Q就可以考虑这些公用部分单独分d来。比如:我们可以多个HTML面都用到的脚本E序~写成独立存在的.js文gQ然后再在页面中按如下方式调用它Q?/p>
<script src="myfile.js"></script>
q样Q公用文件只需要下载一ơ,然后p入缓冲区。等下次再次调用包含公用文g的html面Ӟ下蝲旉明显减少?/p>
让样式表内容q入C工作
CSS是HTML装扮器,一个漂亮的Web面不可能没有它。HTML面中有多种引用CSS的方法,不同的方法导致的效率也不一栗通常Q我们可以将定义?lt;style></style>间的样式控制代码提取出来Q保存到单独?css文g中,然后在HTML面中以<LINK>标记或者@import标记的方式进行引用:
<style>
@import url("mysheet1.css");
</style>
h?点:1?css文g中无需包括<style>标记Q?、@import和LINK标记要定义在HTML面的HEAD部分?/p>
宝贵内存节省两法
量减少HTML面占用的内存空间是加快面下蝲速度的一个有效方法。在q方面,?个需要注意的问题Q?/p>
1、用同一U脚本语a
HTML面M开脚本E序的支持,我们l常会在面中嵌入多U脚本语aQ比如JavaScript与VBScript。但是,不知你发觉没有:q样的合用减慢了面的访问速度。原因在于:要解释ƈq行多种脚本代码Q就必须在内存中装蝲多种脚本引擎。所以,请尽量在面中用同一U脚本语a~写代码?/p>
2、y用IFrame
你用过<IFRAME>标记吗?它可是一个非常美妙的功能。如果要在一个HTML文档中包含第2个页面的内容Q通常的方法是使用<FRAMESET>标记。但是有?lt;IFRAME>Q一切变得简单了。比如,开发一个文档预览页面,可以在左Ҏ(gu)|一pd主题Q在双攄一个IFRAMEQ其中包含要预览的文档;当鼠标掠q左边的每一个主题链接时Q就在右边徏立一个新的IFRAME以预览文档。这样做Q代码效率无疑是高效的,但同时导致了J重的处理过E,最l是~慢的速度?/p>
没关p,我们有办法:只用单一的IFRAME。当鼠标指向一个新主题Ӟ只需要修改IFRAME元素的SRC属性即可。这PM旉内只会有一个预览文档保留在内存?/p>
择优选用动画定位属?/strong>
每天上网览面Q你一定会看到许多动画效果。比如,一个可q兔子在面上来回地走动 ... 实现q个效果的核心技术就是CCS定位。通常Q我们是使用element.style.left和element.style.top2个属性来辑ֈ囑Ş定位的目的。但是,q样做会产生一些问题:left属性返回一个字W串Qƈ且其中包含了度量单位Q比?00px)。因此,要设定新的位|坐标,必首先对q个字符串返回D行处理,然后才能赋|象下面一P
dim stringLeft, intLeft
stringLeft = element.style.left
intLeft = parseInt(stringLeft)
intLeft = intLeft + 10
element.style.left = intLeft;
你一定会感觉做这么点事情竟要~写q么复杂的代码,是否有更z的Ҏ(gu)Q当然有Q请看这4个属性:posLeft、posTop、posWidth ?posHeightQ它们对应于相应字符串返回值的Ҏ(gu)数倹{好了,使用q些属性重新编写代码实C面代码实现的功能Q?/p>
element.style.posLeft += 10
代码短小、速度却更快!
循环控制多个动画
2、如果需要定义页面元素的name,id属性,那么避免不同元素的name和id相同Q?/font>
3、如果没有特D需要,量让name和id相同Q这主要是ؓ了通用
4、在脚本中,获得元素Ӟ量用document.getElementById("name / id") Q能不用尽量不使用其他?/font>
下面是收集的一些IE和Firefox的差异:
1. 对象问题
1.1 Form对象
现有问题Q?br>现有代码q获得form对象通过document.forms("formName")Q这样用在IE 能接受,MF 不能?br>解决Ҏ(gu)Q?br>改用 作ؓ下标q算。改为document.forms["formName"]
备注
上述的改?作ؓ下标q算中的formName是id而name
1.2 HTML对象
现有问题Q?br>?IE 中,HTML 对象?ID 可以作ؓ document 的下属对象变量名直接使用。在 MF 中不能?br>document.all("itemName")或者document.all("itemId")
解决Ҏ(gu)Q?br>使用对象ID作ؓ对象变量?br>document.getElementById("itemId")
备注
document.all是IE自定义的Ҏ(gu)Q所以请大家量不用?br>q有一U方式,在IE和MF都可以?br>var f = document.forms["formName "];
var o = f. itemId;
1.3 DIV对象
现有问题Q?br>?IE 中,DIV对象可以使用ID作ؓ对象变量名直接用。在 MF 中不能?br>DivId.style.display = "none"
解决Ҏ(gu)Q?br>document.getElementById("DivId").style.display = "none"
备注
获得对象的方法不是不是DIV对象Q都使用getElementByIdҎ(gu)。参?.2
1.4 关于frame
现有问题
?IE?可以用window.testFrame取得该frameQmf中不?br>解决Ҏ(gu)
在frame的用方面MF和IE的最主要的区别是Q?br>如果在frame标签中书写了以下属性:
那么IE可以通过id或者name讉Kq个frame对应的window对象
而mf只可以通过name来访问这个frame对应的window对象
例如如果上述frame标签写在最上层的window里面的htm里面Q那么可以这栯?br>IEQ?window.top.frameId或者window.top.frameName来访问这个window对象
MFQ只能这样window.top.frameName来访问这个window对象
另外Q在mf和ie中都可以使用window.top.document.getElementById("frameId")来访问frame标签
q且可以通过window.top.document.getElementById("testFrame").src = 'xx.htm'来切换frame的内?br>也都可以通过window.top.frameName.location = 'xx.htm'来切换frame的内?br>
1.5 H口
现有问题
IE中可以通过showModalDialog和showModelessDialog打开模态和非模态窗口,但是MF不支持?br>解决办法
直接使用window.open(pageURL,name,parameters)方式打开新窗口?br>如果需要传递参敎ͼ可以使用frame或者iframe?br>
2. ȝ
2.1 在JS中定义各U对象变量名Ӟ量使用idQ避免用name?br>?IE 中,HTML 对象?ID 可以作ؓ document 的下属对象变量名直接使用。在 MF 中不能,所以在q_使用时请量使用idQ避免只使用nameQ而不使用id?br>
2.2 变量名与?HTML 对象 id 相同的问?br>现有问题
?MF 中,因ؓ对象 id 不作?HTML 对象的名Uͼ所以可以用与 HTML 对象 id 相同的变量名QIE 中不能?
解决Ҏ(gu)
在声明变量时Q一律加?var Q以避免歧义Q这样在 IE 中亦可正常运行?br>此外Q最好不要取?HTML 对象 id 相同的变量名Q以减少错误?/font>
我们已经知道Q在 document 对象中有一?cookie 属性。但?Cookie 又是什么?“某?Web 站点在?zhn)的硬盘上用很的文本文g存储了一些信息,q些文gq?Cookie。”—?MSIE 帮助。一般来_Cookies ?CGI 或类|?HTML 高的文件、程序等创徏的,但是 JavaScript 也提供了?Cookies 的很全面的访问权利?/p>
在l之前,我们先要学一?使用 document.cookie 属?/a>?/p>
如果直接使用 document.cookie 属性,或者说Q用某种Ҏ(gu)Q例如给变量赋|来获?document.cookie 的|我们可以知道在现在的文档中有多个 CookiesQ每?Cookies 的名字,和它的倹{例如,在某文档中添加“document.write(document.cookie)”,l果昄Q?/p>
name=kevin; email=kevin@kevin.com; lastvisited=index.html
q意味着Q文档包?3 ?CookiesQname, email ?lastvisitedQ它们的值分别是 kevin, kevin@kevin.com ?index.html。可以看刎ͼ两个 Cookies 之间是用分号和空格隔开的,于是我们可以?cookieString.split('; ') Ҏ(gu)得到每个 Cookie 分开的一个数l(先用 var cookieString = document.cookieQ?/p>
讑֮一?Cookie 的方法是?document.cookie 赋倹{与其它情况下的赋g同,?document.cookie 赋g会删除掉原有?CookiesQ而只会增?Cookies 或更改原?Cookie。赋值的格式Q?/p>
document.cookie = 'cookieName=' + escape('cookieValue')
+ ';expires=' + expirationDateObj.toGMTString();
是不是看到头晕了呢?以上不是_体字的地方是要照抄不误的,_体字是要按实际情况做出改动的。cookieName 表示 Cookie 的名UͼcookieValue 表示 Cookie 的|expirationDateObj 表示储存着失效日期的日期对象名Q如果不需要指定失效日期,则不需要第二行。不指定失效日期Q则览器默认是在关闭浏览器Q也是关闭所有窗口)之后q期?/p>
看到了上面的一些下划线了么Q这些是应该注意的地斏V?br /> 首先 escape() Ҏ(gu)Qؓ什么一定要用?因ؓ Cookie 的值的要求是“只能用可以用在 URL ~码中的字符”。我们知道“escape()”方法是把字W串?URL ~码Ҏ(gu)来编码的Q那我们只需要用一个“escape()”方法来处理输出?Cookie 的|用“unescape()”来处理?Cookie 接收q来的值就万无一׃。而且q两个方法的最常用途就是处?Cookies。其实设定一?Cookie 只是“document.cookie = 'cookieName=cookieValue'”这么简单,但是Z避免?cookieValue 中出?URL 里不准出现的字符Q还是用一?escape() 好?br /> 然后“expires”前面的分号Q注意到p了。是分号而不是其他?br /> 最?toGMTString() Ҏ(gu)Q设?Cookie 的时效日期都是用 GMT 格式的时间的Q其它格式的旉是没有作用的?/p>
现在我们来实战一下。设定一个“name=rose”的 CookieQ在 3 个月后过期?/p>
var expires = new Date();
expires.setTime(expires.getTime() + 3 * 30 * 24 * 60 * 60 * 1000);
/* 三个?x 一个月当作 30 ?x 一?24 时
x 一时 60 ?x 一?60 U?x 一U?1000 毫秒 */
document.cookie = 'name=rose;expires=' + expires.toGMTString();
Z么没有用 escape() Ҏ(gu)Q这是因为我们知?rose 是一个合法的 URL ~码字符Ԍ也就是说Q?rose' == escape('rose')。一般来_如果讑֮ Cookie 时不?escape()Q那获取 Cookie 时也不用 unescape()?/p>
再来一ơ:~写一个函敎ͼ作用是查找指?Cookie 的倹{?/p>
function getCookie(cookieName) {
var cookieString = document.cookie;
var start = cookieString.indexOf(cookieName + '=');
// 加上{号的原因是避免在某?Cookie 的值里?br /> // ?cookieName 一L字符丌Ӏ?br /> if (start == -1) // 找不?br /> 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));
}
q个函数用到了字W串对象的一些方法,如果你不记得了(你是不是q般没记性啊Q,请快L查。这个函数所有的 if 语句都没有带?elseQ这是因为如果条件成立,E序q行的都?return 语句Q在函数里碰?returnQ就会终止运行,所以不?else 也没问题。该函数在找?Cookie Ӟ׃q回 Cookie 的|否则q回“null”?/p>
现在我们要删除刚才设定的 name=rose Cookie?/p>
var expires = new Date();
expires.setTime(expires.getTime() - 1);
document.cookie = 'name=rose;expires=' + expires.toGMTString();
可以看到Q只需要把失效日期Ҏ(gu)比现在日期早一点(q里是早 1 毫秒Q,再用同样的方法设?CookieQ就可以删掉 Cookie 了?/p>
不显C在文档中的 Image 对象是用 var 语句定义的:
var myImage = new Image(); ?br />var myImage = new Image(<囄地址字符?gt;);
然后可以像一?Image 对象一样对?myImage 变量了。不q既然它不显C在文档中,以下属性:lowsrc, width, height, vspace, hspace, border 没有什么用途了。一般这U对象只有一个用Q预d?preload)。因为当对对象的 src 属性赋值的时候,整个文档的读取、JavaScript 的运行都暂停Q让览器专心的d囄。预d片以后,览器的~存里就有了囄?CopyQ到真正要把囄攑ֈ文档中的时候,囄可以立LCZ。现在的|页中经怼有一些图像连接,当鼠标指向它的时候,囑փ换成另外一q图像,它们都是先预d像的?/p>
预读囑փ?JavaScript 例子
var imagePreload = new Image();
imagePreload.src = '001.gif';
imagePreload.src = '002.gif';
imagePreload.src = '003.gif';
以上例子适合预读量囄?/p>
function imagePreload() {
var imgPreload = new Image();
for (i = 0; i < arguments.length; i++) {
imgPreload.src = arguments[i];
}
}imagePreload('001.gif', '002.gif', '003.gif', '004.gif', '005.gif');
以上例子适合预读大量囄?/p>
当然也可以先写好一?HTML 文gQ在 open() Ҏ(gu)中直?load q个文g?/p>