1.document的write()方法
调用write方法,javascript会打开一个新文档,当前文档(及内容,包括脚本、事件句柄)就被丢弃了,所以不能 从事件句柄中调用自己的write()方法
可以给write()方法加多个参数,这些参数会依次写入文档
2.document属性
bgColor,cookie,domain,lastModified,location,referrer,title,url
其中,防止站点的深度链接使用refferer
3.文档对象集合
anchors[],applets[],forms[],images[],links[],
1.var pattern=/s$/;此正则表达式对象和所有以字母“s”结尾的字符串都匹配
/java/就和所有的包含子串“java”的字符串相匹配
^$.*+?=!:|\/()[]{}特殊符号,如果加上前缀\,可按直接量使用这些符号
引号和@没有特殊含义
如要在正则表达式中添加按照直接量理解的反斜杠,必须用反斜杠将其转义,如/\\/匹配含反斜杠的字符串
2.字符类 []
放在方括号内就可以组合成字符类,一个字符类和它所包含的任何字符都匹配
/[abc]/就和字母"a"、“b”、“c”中的任何一个字母都匹配
否定字符类^
/[^abc]/匹配a,b,c之外的所有字符
/[a-z]/和/a-zA-Z0-9/
\s匹配的是空格符、制表符和其他Unicode空白符
\w等价于[a-zA-Z0-9_]
\d等价于[0-9]
3.重复 {}?+*
{n,m}匹配前一项至少n次,但是不能超过m次
{n,}匹配前一项n次,或更多
{n}匹配前一项恰好n次
?匹配前一项0次或1次{0,1}
+匹配前一项1次或多次{1,}
*匹配前一项0次或多次{0,}
4.非贪婪的重复?即往少里匹配
在重复字符后加问号即可(??,+?,*?,{1,5}?)
例:/a+/应用到“aaa”上时,它与三个字母都匹配。但/a+?/只匹配一个或多个必要的字母a,因此只匹配第一个字母a
/a*?b/匹配“aaab”,而不是b,因为该模式的非贪婪版本在字符串的第一个字符处不匹配,所以该匹配将返回,甚至不考虑对后面的字符进行匹配
当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
. 除换行符和其他Unicode行终止符外的任意字符
5.选择、分组和引用 |,(),(?:...)
1) 正则表达式的语法还包括指定选择项、对子表达式分组和引用前一子表达式的特殊字符。字符“|”用于分隔供选择的字符
2) 在正则表达式中括号具有几种作用
(1)把单独的项目组合成子表达式,便于使用?+*|处理独立的单元,如:/java(script)?/
(2)在完整的模式中定义子模式,如:/[a-z]+(/d+)/从一个或多个的小写字母中挑选出结尾含一个或多个数字的字符串(强调包含结尾的数字)
(3)允许我们在同一个正则表达式的后部引用前面的子表达式(引用的不是子表达式的模式,而是与那个模式相匹配的文本),如: /(['''][^''']*\1)/开始和结束的引号相匹配
3)还可以使用(?:...)来分组,不获取匹配结果,这种改进了的括号并不生成引用,如:/([Jj]ava(?:[Ss]cript)?)\sis\s(fun\w*)/ ,\2引用了与(fun\w*)匹配的文本
匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
6.指定匹配的位置^,$,\b
正则表达式的锚:像\b这样的元素不指定匹配的字符串中使用的字符, 它们指定的是匹配发生的合法位置
^定位开头,$定位末尾,\b匹配边界
/^JavaScript$/如果要匹配Java这个单字/\bJava\b/
锚定条件:(?=) (?!)(?<=)(?<!)
(?=)正前向(正向预查)
正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!)负前向(负向预查)
负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
(?<=正后向 解释:返回匹配的文本前面的内容必须是与=号的表达式相匹配,但不返回这个表达式
(?<!负后向
7. 标志i,g,m
i:匹配小写
g:匹配全局
m:多行匹配
8. 用于模式匹配的String方法
(1)search(),该方法以正则表达式为参数,返回第一个与之匹配的子串的开始字符的位置,如果没有任何匹配的子串,它将返回-1
(2)replace() 执行检索与替换操作。参数1:正则;参数2:要替换的字符串;如果正则带g,它将替换所有匹配的字符串,如果不带g,它只替换第一个与之匹配的字符串;replace()第二个参数可为函数
*如果在替换字符串中出现了符号$加数字,那么replace()将用与指定的子表达式
text.replace(quote,"‘‘$1’’");
(3)match() 参数为正则。返回包含结果的数组,且具有length,index和input属性
(4)split()可以以正则表达式为参数
9.RegExp对象
RegExp类既定义了类属性,又定义了实例属性。第一个参数是包含正则表达式主题的字符串,使用\标示转义序列,必须使用\\替换所有\字符。第二个参数是可选的,可为"g","i","m"或它们的组合
(1)exec()以字符串为参数,有匹配,返回数组,没有匹配,返回null;具有g标志的正则调用exec()时,对象的lastIndex属性设置到紧接着匹配子串的字符位置。供下次检索做开始处使用。
(2)test() 它的一个参数是一个字符串,包含正则的一个匹配,就返回true
本章介绍window对象的属性和方法,这些属性和方法允许控制浏览器以及它们的窗口和frame
1.计时器:window对象的setTimeout()方法用来安排一个函数在指定的毫秒数过去之后运行
setInterval()指定的函数在一个指定的毫秒数的间隔里重复地调用
可以传递一个函数或者一个字符串作为它们的第一个参数
应用:当用户将鼠标停留在某个文档元素上超过半秒中的时候,如果要显示一个工具提示,可以使用setTimeout()来调度工具提示显示代码
如果鼠标在代码触发前离开了,可以使用clearTimeout()来取消掉计划的代码
setInterval()可用来调度执行动画的代码,setTimeout()方法在浏览器执行完所有的事件句柄并完成当前文档的当前状态更新后执行,查询或修改文档内容的事件必须调用这个方法来作为延迟,直到文档处于一个稳定的状态。
2.浏览器Location和History
这两个对象提供了当前显示的文档的URL的访问,并且允许载入新的文档或者让浏览器后退(或前进)到一个之前浏览过的文档
(1)解析URL
window.location可代替window.location.href,location对象的其他属性包括(protocol,host,pathname和search等)则分别标明了URL的各个部分
http://192.168.1.140:74/?com=com_contents&view=contentlist
可以使用search属性得到问号之后的那部分URL
通用的函数getArgs(),可以用这个函数将参数从URL的search属性中提取出来
function getArgs()
{
var args=new Object();
var query=location.search.substring(1);
var pairs=query.split("&");
for(var i=0;i<pairs.length;i++)
{
var pos=pairs[i].indexOf('=');
if(pos==-1) continue;
var argname=pairs[i].substring(0,pos);
var value=pairs[i].substring(pos+1);
value=decodeURIComponent(value);
args[argname]=value;
}
return args;
}
3.history对象
支持back(),forward()和go()三个方法
4.获取窗口,屏幕和浏览器信息
获取窗口大小和位置的信息
(1)window.outerWidth,window.outerHeight浏览器窗口在桌面的大小
(2)window.screenX,window.screenY窗口的位置
(3)window.innerWidth,window.innerHeight HTML文档显示的视口大小,除去菜单栏,工具栏等窗口的大小
(4)window.pageXOffset,window.pageYOffset这些值指明了水平和垂直的滚动条位置
注意,这些属性是只读的
5.打开窗口
window.open("smallwin.html","smallwin","width=400,height=350,status=yes,resizable=yes");
第一个参数:是要在新窗口中显示的文档的URL,可为null或者空字符串
第二个参数:是新开窗口的名字
第三个参数:特性列表,如上例中,弹出的是一个较小的可调整的浏览器窗口,它只具有状态栏
在新窗口中运行的Javascript要引用打开它的窗口,可以使用opener
6.关闭窗口
window.close()
7.moveTo()可以将窗口的左上角移动到指定的坐标,moveBy()可以将窗口上,下,左,右移动指定像素
resizeTo()和resizeBy()可以按照相对数量和绝对数量调整窗口的大小
8.focus()会请求系统将键盘焦点赋予窗口,blur()则会放弃焦点
9.滚动:scrollBy(),scrollTo(),offsetLeft,offsetTop,focus(),定义锚点window.location.hash="#top";
10.简单对话框
alert(),confirm(),prompt()
if(!confirm(message)) return;
//_url为跳转到下一页的Url,pageIndex为响应的页码,pageCount为计算后的总页数
// count为列表的总记录数,从数据库查询得到,下面语句用来计算总页数
pageCount = count / pageSize + (count % pageSize != 0 ? 1 : 0);
{
if (pageCount <= 1)
return string.Empty;
pageIndex = pageIndex + 1;
// 计算显示页码
int x = pageIndex / 9;
if (pageIndex % 9 == 0) --x;
int startPage = (x * 9) + 1;
int endPage = Math.Min(pageCount, startPage + 8);
// 生成换页代码
System.Text.StringBuilder sb = new StringBuilder();
string url = _url;
if (string.IsNullOrEmpty(url))
return string.Empty;
if (url.Contains("{0}"))
url = string.Format(url, "&Page={1}");
else if (!url.Contains("?"))
url = _url + "?Page={1}";
else
url = _url + "&Page={1}";
url = "<a href = \"" + url + "\">{0}</a>";
sb.Append("<ul>");
sb.Append(" <li>页面显示</li>");
//上一页
if (pageIndex == 1)
{
sb.Append("<li>");
sb.Append("<a> <img src='/Images/com_gallery/pic_28.jpg' /><a>");
sb.Append("</li>");
}
else
{
sb.Append("<li>");
sb.AppendLine(String.Format(url, " <img src='/Images/com_gallery/pic_28.jpg' />", pageIndex - 1));
sb.Append("</li>");
}
sb.Append("<li>");
if (startPage > 1)
sb.Append(String.Format(url, "...", pageIndex - 1));
sb.Append("</li>");
for (int i = startPage; i <= endPage; i++)
{
if (i != pageIndex)
{
sb.Append("<li>");
sb.Append(String.Format(url, "[" + i + "]", i));
sb.Append("</li>");
}
else
{
sb.Append("<li class='select'>");
sb.Append(string.Format("<a>[{0}]</a>", i));
sb.Append("</li>");
}
}
if (pageCount > endPage)
{
sb.Append("<li>");
sb.Append(String.Format(url, "...", endPage + 1));
sb.Append("</li>");
}
//下一页
if (pageIndex == pageCount)
{
sb.Append("<li>");
sb.Append("<a><img src='/Images/com_gallery/pic_30.jpg' /></a>");
sb.Append("</li>");
}
else
{
sb.Append("<li >");
sb.Append(String.Format(url, "<img src='/Images/com_gallery/pic_30.jpg' />", pageIndex + 1));
sb.Append("</li>");
}
sb.Append(" <li>");
sb.Append(" <div align=\"right\">");
sb.Append(" 到第");
sb.Append("<input name='inputpagenum' style='width:35px' type='text'/>");
sb.Append("页 </div>");
sb.Append("</li><li>");
sb.Append("<img onclick=\"jumpPage('" + pageCount + "')\" src=\"Template/default/images/login_01.jpg\" /></li>");
sb.Append("</ul>");
return sb.ToString();
}
if (datalist!=null)
{
int count = datalist.Count;
int i = 0;
while (i < datalist.Count)
{
Response.WriteLine("<tr>");
for(int j=0;j<6;j++)
{
if(count>0)
Response.WriteLine("<td align='center'></td>");
i++;
count--;
}
Response.WriteLine("</tr>");
}
}
Response.WriteLine("</table>");
中心思想,设置两个变量来判断是否打印下一个tr,以及是否打印下一个td

