刚刚看到一篇好文(原文链接), 对Javascript中的delete操作符分析得很透彻。在这里简单地介绍一下内容。
虽然是一个小小的delete操作符,其行为却异常复杂。
阅读全文 »最近一直在开发Ajax应用程序。众所周知Ajax的特点是客户端和服务器分离, 客户端通常由纯Javascript组成,通过XMLHttpRequest对象与服务器通信。 在调试客户端代码时,如果服务器开在本地,尚可通过samba等方式直接编辑 服务器上的客户端js代码,倘若服务器在异地,那么每次修改js代码后通过FTP等 方式上传之后再调试就十分费事。说到这里自然会想到将js代码放到本地, 然而XMLHttpRequest却只能访问同一域名下的URL,本地的js代码无法直接使用 远程服务器上的服务。
迷茫之际,同事介绍了delegate这款软件,利用它即可实现本地调试客户端代码。
delegate可以在这里下载。 delegate实际上是一个功能强大的代理服务器,它有个类似于Linux的mount功能, 能够将Internet上的URL映射到本地。利用这个功能, 即可将远程的服务器端和本地的客户端集成到同一个域名下, 实现客户端代码的本地调试。
方法如下:
- 将Apache配置到本机的8080端口,然后将客户端代码放在htdocs下, 使之能够通过 http://localhost:8080/client/ 访问。
- 下载delegate并解压缩。
- 编辑以下的配置文件 delegate.cfg。
-P80 ADMIN="yourname@yourmail.com" MOUNT="/client/* http://localhost:8080/client/*" MOUNT="/cgi-bin/* http://server-address/cgi-bin/*"
第一行的 -P80 指定delegate使用80端口;第二行的ADMIN指定管理员邮件地址, 可以随意设置;第三行将客户端映射到 delegate 的 /client/ 路径下; 第四行将远程服务器目录映射到 delegate 的 /cgi-bin/ 路径下。
另外,如果你需要通过代理服务器访问远程服务器,可以这样设置:MOUNT="/cgi-bin/* http://server-address/cgi-bin/*" PROXY="代理服务器地址:端口"
- 在命令行输入以下命令安装delegate。注意不同版本的delegate的可执行文件名不同。
dg9.4.1.exe +=delegate.cfg
- 打开浏览器,访问 http://localhost/client/。这样即可随时看到对js代码的修改。
实际上,用好这个方法还可以“盗用”许多网站的服务,即自己开发客户端, 再通过 delegate 将请求转发给服务器。其方法不再详述。
Firebug开发小组终于发布了激动人心的Firebug 1.0 Beta版。 与当初的Firebug 0.4版相比,这次的正式发布版已经不仅仅是简单的Javascript控制台, 而是集控制台、调试器、DOM查看/编辑器、网络监视器于一身的强大调试工具。 而使用者也不再限于Javascript开发者,内置的Box模型查看功能让网页设计师也受益匪浅。 下面我们来看看它的新功能吧。
阅读全文 »用Javascript经常会遇到一个很头疼的问题:Firefox下工作正常的代码,放到IE下就出现语法错误。这时可以检查一下是否有类似于下面的代码。
<script>
var a = {name:"charlee",};
alert(a.name);
</script>
生成对象时,对象的最后一个属性后面多了一个逗号。频繁添加删除属性时,经常会忘记删除最后的逗号。Firefox会忽视这个逗号,而IE却会报错。
感谢Clear为我们提供了这个效率更高的字符串替换函数。这是经常使用的HTML特殊字符替换函数,即将 &、<、>、" 等函数替换成 &、<、>、"。通常的作法都是连续使用数个 replace 函数,而Clear仅使用一个 replace 就完成了替换。
我对这两个函数作了benchmark,发现新函数的效率约为原函数的1.4倍。虽然没有预想中那么高效率,但当要替换的字符串更多时,效率应该会提高吧。
测试方法为,对一个2048字节长的字符串分别执行两个函数100次,取其执行时间。下面为10次测试的结果。toTXT_1 为通常的作法,toTXT_2 为Clear的方法。
| toTXT_1(ms) | toTXT_2(ms) | toTXT_1/toTXT_2 |
| 1609 | 1204 | 75% |
| 2250 | 1547 | 69% |
| 1672 | 1313 | 79% |
| 1813 | 1250 | 69% |
| 1844 | 1219 | 66% |
| 2063 | 1421 | 69% |
| 2031 | 1172 | 58% |
| 1797 | 1360 | 76% |
| 2015 | 1281 | 64% |
| 1860 | 1500 | 81% |
测试程序在这里。
javascript-benchmark.zip
0. 前言
所谓IE地址栏表达式,就是在IE的地址栏中输入 javascript:<代码>,执行某些功能,来动态改变原有页面的参数以达到某些目的,例如开放被禁止的按钮、显示原本隐藏的图片等等。本文将就IE地址栏的使用方法做一个详细的说明。
阅读全文 »DOM对象event仅在事件发生的期间内存在。因此下面这种写法是错误的:
<a href="javascript:alert(window.event.x)">
而应当写成
<a href="#" onclick="alert(window.event.x); return false">
通常,如果对HTML元素指定了 position: absolute,则可以通过 left、top、pixelLeft等 属性获取该元素的位置和大小。但是不指定 position:absolute 的情况下则不能使用该方法。
幸运的是如果我们想知道的是文本框的位置,则可以使用 textRange 对象来获取。
如果我们有
<input type="text" id="inputbox">
则可以通过以下代码获取其位置:
var inputbox = document.getElementById('inputbox');
var tr = inputbox.createTextRange();
top = tr.boundingTop;
left = tr.boundingLeft;
height = tr.boundingHeight;
