实现1
1.String.prototype.trim = function() {
2. return this.replace(/^ss*/, '').replace(/ss*$/, '');
3.}
看起来不怎么样,动用了两次正则替换,实际速度非常惊人,主要得益于浏览器的内部优化。一个著名的例子字符串拼接,直接相加比用Array做成的StringBuffer还快。base2类库使用这种实现。
实现2
1.String.prototype.trim = function() {
2. return this.replace(/^s+/, '').replace(/s+$/, '');
3.}
和实现1很相似,但稍慢一点,主要原因是它最先是假设至少存在一个空白符。Prototype.js使用这种实现,不过其名字为strip,因为Prototype的方法都是力求与Ruby同名。
实现3
1.String.prototype.trim = function(...
click() 对象.click() 使对象被点击。
closed 对象.closed 对象窗口是否已关闭true/false
clearTimeout(对象) 清除已设置的setTimeout对象
clearInterval(对象) 清除已设置的setInterval对象
confirm("提示信息") 弹出确认框,确定返回true取消返回false
cursor:样式 更改鼠标样式 hand crosshair text wait help default auto e/s/w/n-resize
event.clientX 返回最后一次点击鼠标X坐标值;
event.clientY 返回最后一次点击鼠标Y坐标值;
event.offsetX 返回当前鼠标悬停X坐标值
event.offsetY 返回当前鼠标悬停Y坐标值
document.write(document.lastModified) 网页最后一次更新时间
document.ondblclick=...
通过使用JavaScript执行多重生存周期 ID cookies来获得ASP更多功能。
建立良好客户端功能的基础
当我很小的时候,父亲是一名建筑工人。在夏天,我偶而也会充当一名小伙计,从事住宅建设工作。通过仔细观察,我掌握了一些建筑的基本概念。这些观点同样也可适用于程序设计中。其中最重要的观点莫过于所有的建筑都依赖于一个优质的基础。这一观点无论对于盖房子来说还是对于应用软件来讲都一样正确。如果基础是薄弱的,那么所有的上层建筑都将坍塌。
由于MSC是 以cookie为基础的,因此JavaScript 的cookie 功能是基础的第一层。这些功能可在特定的数值上建立cookie;得到一个现存的cookie数值;删除一个现有的cookie—&md...
很多high-res图像真的可以使 Web 站点更加整洁。但是它们也会使站点的访问速度变慢——图像是文件,文件使用带宽,带宽直接与等待时间相关。是该了解如何通过一个叫做图像预载入(preloading)的技巧来提高 Web 站点的访问速度的时候了。
图像预载入
对于浏览器载入图像来说,只有在对图像发送一个 HTTP请求之后,它们才会被浏览器载入,对图像的 HTTP 请求要么使用 <img> 标记,要么通过方法调用实现。如果使用 JavaScript 脚本来处理在 mouseover 事件时交换图像,或者在一段时间之后自动更改图像,那么在从服务器获取图像时可能要等上几秒钟到几分钟的时间。如果使用一个慢速的 Internet 连接,或者要获取的...
不像域级有效性检查(field-level validation),表单级有效性检查(form-level validation)将整个表单上的某组(或全部)值作为一个整体分析其一致性。表单级有效性检查一般发生在将一个已完成的HTML 表单提交给CGI 程序之前。我们这样做是为了确保用户在将数据发送至服务器之前,已经填写了所有的必填域。
验证整个表单其实相当简单。在我们的例子当中,我们已经去除了大部份会自动弹出即时警告信息的域级有效性检查。下面是一个例子:
function isANumber(number) {
answer = 1;
if (!parseFloat(number)) {
//the first digit wasn't numeric
answer = 0;
} else {
//the first digit was numeric, so check the res...
有的时候,在一个窗口的内容发生变化时,另外一个窗口的内容也应当变化。你可以使用 JavaScript 同时打开多个 HTML 文件。听起来不错,但是用户通常会被浏览器的 Back 和 Forward 按钮只改变一个 HTML 文件搞得很苦恼,因为这样使窗口完全地不同步。这个技巧可以解决那个问题。
同步窗口的函数位于一个大窗口(syncUp)的框架集文件(syncframe.html)中:
function kinShip(url) {
if (waah != null && waah.child.location.href != url) {
waah.child.location.replace(url);
}
}
函数kinship() 检验小窗口(waah)是否打开,以及它的框架 child 是否包含正确的同步文件。如果waah处于打开状态,但框架 chi...
每位认真的网络用户,都有碰到过图像映射(Image maps)——你知道,点击那些图形的不同点,能够链接到不同的 URL。JavaScript 可让你进一步扩展image maps。在我们的例子之中,当用户点击了某位特定的人才时,我们会给有关他们的更多信息。
首先,我们简单地设置一个函数,这个函数定义了image map 每边的说明述文字:
functionleftDescription() {
//the " " character displays a line break
document.orderForm.description.value =
"This is Lefty. She enjoys figuring the tip
on restaurant bills and sorting her 14 years'
worth of computer magazines by subject.";
}
functi...
新打开的子窗口内容并不一定要写在它自己的 HTML 文件里面,下面让我们看一个例子:
这个例子中的窗口内容,包括图片在内,都是在窗口被打开以后写入的。要实现这个效果看上去有无数种方法,下面是其中一种:
varwriteWin = null;
function writeLeft() { writeWin =
window.open('','aWin','top=0,left=0,width=250,height=350'); varePen =
'<html><head><title>sans .html file</title></head>'; ePen += '<body
text="#cccccc" bgcolor="#000000"><tt><p>once upon a time, a ghost
said:</p>'; ePen += '<p><center><img
...
由于JavaScript 是面向对象的,它将每种HTML 表单元素——也就是按钮、选择框、文本域、甚至是表单本身——都看作是包含自身数据的一个独立对象。有了JavaScript,你就能在用户的计算机上,检查任何HTML 对象的数据,并根据结果做出决定。例如,运用域级的有效性检查(field-level validation),你能确保用户是否在一字段键入数字。
为了执行域级的有效性检查,你需要定义一个包含有效性检查逻辑的JavaScript 函数,然后在用户落下某个特定的HTML 域没有填写时(按键盘离开或是光标移开),就触发该项函数。一般来讲,这意味着使用一个onChange(可以检测出用户何时改变域)或是onBlur(检测用户何时...
控制窗口内容滚动算是一个较少使用到的 JavaScript 窗口功能,不过这一点可能会随着可滚动图层内容的到来而有所改变。这个技巧将教你如何实现内容滚动功能。
这段代码很简单。让我们先看看向下滚动功能所使用的函数。
var y = 0;
var when = null;
varps = parent.scrollee;
functionscrollMe() {
if (document.all && y < ps.document.body.scrollHeight || y < ps.document.height) {
ps.scroll(0,y);
y = y + 4;
when = setTimeout('scrollMe()',1);
}
}
scrollMe() 函数首先检查浏览器是否支持document.all属性(只有 IE 浏览器才支持这个属性),然后检查变量 y 的值是否小于scrollHeight属性...
一旦你验证了用户已经输入有效的数据,那么就应该处理这些数据了。在JavaScript 中,处理表单数据相当容易。
我们将利用下面的函数来计算总认养额:
functioncalcTotal()
document.orderForm.totalPrice.value =
(document.orderForm.numberOrdered.value
* 15.99);
}
简单吧,不是吗?calcTotal() 函数简单地取出用户在numberOrdered域所提供的数字,然后将其乘以15.99。
计算出来的总额,接着会打印在“Total sponsorship fee”框中。
当然,这里是用来调用该函数的HTML:
Number of brains you'd like to sponsor
<INPUT TYPE="text" NAME="numberOrdered&q...
通常你会需要打开第二个窗口显示相关的链接或者其它信息给用户。使用这个技巧中的代码可以同时打开多个窗口。这会在 JavaScript 产生的窗口和打开这些窗口的父窗口之间建立一个父/子关系。
四个窗口打开,每个位于屏幕的一角。在关闭主浏览器窗口之前新弹出的窗口会首先被关闭。
要创建这个效果,我定义了四个窗口,每个都有它们自己的功能。然后,我创建了一个函数(winBig())调用四个定义相应窗口的函数:
function winBig() {
win1(150,150);
win2(175,175);
win3(200,200);
win4(225,225);
}
不能在一个函数调用之中定义多个窗口;这样不会运行。
多窗口 UI 能够让用户节省屏幕空间并从其它东西中区分导航和目标...
除了同时打开多个窗口之外,你还可以连续地打开多个窗口。假设你建立一个站点,该站点的启动 HTML 文件从主浏览器窗口打开两个子窗口。第一个子窗口可以用来显示主要信息,第二个窗口用于导航。这样用户就能够关闭主浏览器窗口,同时 Web 开发人员也能够控制所有的导航元素。
每个窗口是一个被打开的子窗口的父窗口(或者称 opener)。弹出窗口 1 从主窗口打开。弹出窗口 2 到弹出窗口 4 在前面的子窗口装载之前打开。例如下面的代码,从弹出窗口 1 HTML 文件打开弹出窗口 2:
<script language="javascript">
<!--
var no2 = null;
function cascade2() {
no2 = window.open('cascade2.html','cas2','d...
在框架集中,aware0.html 和 aware1.html 与左框架同步,并以白色背景显示。下面是代码:
function preMpt() {
if (self.name == 'contextee') {
document.bgColor = '#ffffff';
parent.preNup('aware1b.html');
}
else {
document.bgColor = '#d2b48c';
self.focus();
window.onblur = function() {
window.close();
}
}
}
…
<body … onLoad="preMpt()">
另一方面,如果两个 HTML 文件任何之一是在一个弹出窗口中打开的,那么它们把焦点定于自己身上并以白色背景显示。而且,当用户在屏幕的其它任何地方点击鼠标时,弹出窗口自动关闭。
为什么这样做?简言之,就是重用。假设你...
我是为了一个仍在开发中的电子商务网站(eMirage)编写这个程序的。与其强迫用户等待所有的产品图片下载完毕,我选择将图片显示在一个弹出窗口中。两个图片用同一个窗口显示,而且没有独立的 HTML 文件。下面是具体方法:
var faux = null;
varpic = new Image();
function copyCat(pic) {
faux = window.open('','newWin','dependent,resizable,top=20,left=20,width=273,height=230');
varfd = faux.document;
fd.open();
fd.write('<html><head><title>midnight @ the oasis</title></head>');
fd.write('<body bgcolor="black" onLoad="window.focus()">');
...
在这期专栏中,我将说明如何翻新选项卡式面板使其能够在不支持标准的4.0版本的老浏览器中工作,我还会稍微地改善面板的界面使其能够更具吸引力。
在翻新原来的选项卡式面板时,选项卡和面板在 Navigator 4.0中将会缺少边界,但是其它功能在 Netscape Navigator 或 Microsoft Internet Explorer 中都会一样。点击一个选项卡将显示与其关联的面板;点击后端的一个选项卡可以将引起选项卡的行移至前端。这就是我前面提到的一点小的界面改进;它使得所有行中的面板表现为同一种方式,而且使组件的行为更加一致。不幸的是,它就使得该组件不能再在 Opera 上运行,因为Opera 不支持 CSS clip属性。
另外一个显示上的改进是该组件不再是...