Archive for the ‘Javascript’ Category

javascript中要判断一个变量是否为array通常是比较困难的,因为

var a = [];
alert(typeof a === ‘object’); // true

通常的做法是判断

a.constructor === Array // true

可是这个方法有一个问题,如果一个数组是来自另一个frame中的,那么它的constructor 将是另一个对象。
YUI中用了如下的方法:

isArray: function(o) {
if (o) {
return L.isNumber(o.length) && L.isFunction(o.splice);
[...]

修正了几个BUG,已经在实际项目中使用,没有问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
Array.prototype.indexOf || (Array.prototype.indexOf = function(value) {
for (var i in this) {
if (this[i] == value) {
return i;
[...]

jQuery 是个宝库,而 jQuery 的插件体系是个取之不竭的宝库,众多开发者在 jQuery 框架下,设计了数不清的插件,jQuery  的特长是网页效果,因此,它的插件库也多与 UI 有关。本文是 webdesignledger.com 网站推选的2009年度最佳 jQuery 插件。
拉洋片 在一个固定区域,循环显示几段内容,这种方式很像旧时的拉洋片,2009年,这种 Web 效果大行其道,jQuery 有大量与此有关的插件,以下插件无疑是最佳的。 AnythingSlider 由 CSS-Tricks 的 Chris Coyier 设计,功能齐全,应用十分广泛。 Easy Slider 这个 Content Slider 插件既包含传统“前后”导航模式,又包含页码式导航。 [...]

According to this document at Mozilla Developer Center, Javascript 1.5 has been implemented in a browser since at least the first releases of Mozilla as open source browser, which means, in other words, since around 1998. Let’s assume it was 2002 which is marked as the release of the 1.0 version.
And I was doing some [...]

昨天用js写了一个Json_encode的工具函数,附上模仿jQuery并加强的extend函数。
对于extend函数,主要加强的是可以遍历子对象来extend,而不是简单的覆盖。
getJSON的使用方法:

jlUtil.getJSON(obj:Object [, skip_arr:Array])
//skip_arr指定要忽略的键名

extend的使用方法:

jlUtil.extend(obj:Object [, obj2:Object…])
//这个函数需要jQuery
//如果只带一个参数,则这个obj将被extend到jlUtil本身
//如果带两个以上的参数,则第2个及以后的参数将被extend到第一个参数

下面是代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
var jlUtil = {
getJSON: function(obj, skip_arr){
if(typeof obj == "number"
|| typeof obj == "boolean"){
return obj;
}else if(typeof obj == "string"){
return "’" + obj.replace("’","\\’") + "’";
}
 
var json = [];
skip_arr = skip_arr ? skip_arr : [];
for(var key in obj){
//skip function and the keys in skip arr
if(obj[key].constructor == Function
|| skip_arr.indexOf(key) != -1){
continue;
}
 
//in Array loop
if(!isNaN(parseInt(key)) || key.constructor [...]

先来一段废话:
今天是周五,终于可以放松啦,蛮累的,今天上班的时候萌生这个想法,自己的博客流量总是上不去,多写点有用的东西,带动一下流量,嘿嘿。
本来是想继续翻译的,后来发现这本书已经有译本了,并且不允许在网络上发布其内容,只好放弃翻译,改写读后感好了,继续使用这个目录。两个半小时的心血啊。
正文:
目录
关于作者
关于技术校对者
感谢
第一部分 介绍现代Javascript
第一章   现代Javascript编程
1.1 面向对象Javascript
1.2 测试你的代码
1.3 打包和发布
1.4 非侵入的DOM脚本
1.4.1 文档对象模型DOM
1.4.2 事件
1.4.3 Javascript和CSS
1.5 Ajax
1.6 浏览器支持
1.7 总结
第二部分 专业Javascript开发
第二章   面向对象Javascript
2.1 语言特性
2.1.1 引用
2.1.2 函数重载和类型校验
2.1.3 命名域
2.1.4 闭包
2.1.5 语境
2.2 面向对象基础
2.2.1 对象
2.2.2 对象的创建
2.3 总结
第三章   编写可重用的代码
3.1 标准的面向对象代码
3.1.1 原型继承
3.1.2 经典继承
3.1.3 基础类库
3.1.4 原型类库
3.2 打包
3.2.1 名称空间
3.2.2 整理你的代码
3.2.3 压缩
3.3 发布
3.4 总结
第四章   Debug和测试的工具
4.1 Debug
4.1.1 错误命令行
4.1.2 DOM查看器
4.1.3 Firebug
4.1.4 Venkman
4.2 测试
4.2.1 JSUnit
4.2.2 J3Unit
4.2.3 测试实例
4.3总结
第三部分 非侵入的Javascript
第五章   文档对象模型DOM
5.1 介绍文档对象模型DOM
5.2 初识DOM
5.2.1 操作DOM中的空白部分
5.2.2 简单展示DOM的功能
5.2.3 绑定每个HTML节点
5.2.4 标准DOM方法
5.3 [...]

Our first user script simply displays an alert saying “Hello world!” when it is executed.

Example: Display the “Hello world!” alert
alert(‘Hello world!’);

Although this code looks obvious enough, and does exactly what you would expect, Greasemonkey is actually doing a number of things behind the scenes to ensure that user scripts do not interact badly with other scripts defined [...]

In: Javascript| Web前台相关| xhtml

31 Jan 2009

略懂 HTML 的朋友都知道,如果想让一个链接在新窗口中打开,通常的做法是利用 target=”_blank” 来设定 a 标签。例如:

<a href=“http://jennal.cn“ target=“_blank“>Jennal.cn</a>

这种做法确实比较方便,但在 XHTML 1.0 Strict 中去掉了 target 属性,也就是说我们不能再利用 target 属性来控制链接的行为。虽然当今流行的浏览器在 XHTML 1.0 Strict 甚至 XHTML 1.1 下扔能正确执行 target=”_blank”,但这样的代码毕竟是不规范的,不推荐使用。
很自然,我们会想到用 Javascript 来解决这个问题,我通常是使用下面的方法:

<a href=“http://jennal.cn“ onclick=“window.open(this.href);return false;“>Jennal.cn</a>

这样虽然可以满足要求,但是当链接很多的时候,代码就显得有些臃肿了。为了简化代码,我们应该用 DOM Event / DHTML 的方法来解决这个问题。今天我恰好在做一个网页,需要使用 XHTML 1.0 Strict,准备自己写一个这样的 Javascript。不过幸好我养成了万事先 Google 的坏习惯,还真让我找到了一个很完善的 Javascript 弹窗代码,这段代码不仅写的漂亮,通用性强,而且还考虑到了当今流行的浏览器按下组合键点击链接的情况,已经非常完善了。代码源头在这里,作者提供了源码下载和一个演示。
这段代码的通用性非常强,作者原文中举例写的也很详细,其实最简单的用法就是为需要开新窗的链接添加 rel=”external” 属性,当然,你也可以自己定制根据 class 或其它什么属性来判断。

<a href=“http://jennal.cn“ rel=“external“>Jennal.cn</a>

当然,在网页设计中,弹出新窗口在多数情况下应该尽量避免,只在可以提高用户体验的情况下才需要使用。此外,由于有些 Pop Window Blocker 会拦截 Javascript 弹出窗口,我们可以修改这段代码,通过判断窗口是否成功建立来给出关闭弹窗过滤的提示,相信可以使用户体验提升不少。
转自:http://blog.istef.info/2007/05/17/open-a-new-window-when-click-a-link-under-xhtml-10-strict/

1    history.go(0)
2    location.reload()
3    location=location
4    location.assign(location)
5    document.execCommand(‘Refresh’)
6    window.navigate(location)
7    location.replace(location)
8    document.URL=location.href

一、我们需达解决的麻烦

减少HTTP请求数. 减少HTTP请求数有什么好处

降低服务器跟客户端的建立和消除HTTP请求和响应Header的开销
减少服务器为HTTP连接的进程和线程的开销,如果可能,还会包括GZIP压缩的CPU开销.

减小被请求文件大小, 减少请求数据占用的网络带宽.
让用户更快的看到想要的结果.
提高客户端渲染速度.
让浏览器同时能请求更多的数据.
提高服务器相应速度.
通过版本化控制客户端Cache.

二、如何解决我们的麻烦
A.如何减少HTTP请求数

合并JS文件跟CSS文件。
合并框架图片以及相对变动较少的图片成一张,通过CSS背景切割来完成渲染,比如:加速图片显示。
合理使用本地Cache来缓存JS/CSS/IMAGE。
合理使用UserData缓存JS文件,对于FF用户可以单独请求服务器,这样能解决80%用户的问题.代码可以蓉儿(meizz)的js framework1(标注1)。
把JS跟CSS合并成一个文件

B.减小被请求文件大小,减少请求数据占用的网络带宽

压缩JS体积:删除JS中空白换行,注释,混淆把长变量换成短变量;
压缩CSS体积:删除CSS注释、写法尽量用简写;
使用(X)HTML+CSS方式搭建网站结构,提高CSS重用性,来减少(X)HTML文件大小;
使用服务器端GZIP压缩JS/ CSS文件,缩小传输文件大小。附注:Apache1跟Apache2的GZIP的效率跟方式不一样的,根据需要自行选择。
嗷嗷补充说明:压缩、合并JS和CSS都由程序处理。而不是自己手动去缩删,不然不利于后期维护。

C.让用户更快的看到想要的结果
用户对于一个站点的白页的忍受时间根据统计是8-12秒。白页的产生可能由于各种原因引起,我们能做的就是怎么让用户能变的稍微能等待更久。

方案1:多做一个引导页,让用户体会其中的变化
案例:mail.aol.com中的loading引导页
方案2:优先载入页面结构以及结构图片,后一步载入当前页面数据,再后一步载入Iframe,Flash等数据.让用户尽早的看到被打开页面的希望.

D.提高客户端渲染速度
这个问题就比较泛泛了,影响客户端的渲染速度有多方面的,主要目的都是提高程序方面的效率.

对于大索引的结构,尽可能的少用索引访问,能用访问兄弟节点的方式尽可能用访问兄弟节点的方式.
字符串拼接尽可能用数组方式
大规模添加节点数据,请不要使用appendChild方式,尽量使用类似innerHTML的insertAdjacentHTML方式,FF下需修正(标注1)

E.让浏览器同时能请求更多的数据.
浏览器默认只是支持单域名同时有两个HTTP请求,使用多域名将能把请求数提高,在网络条件优良的情况下,能更快的下载数据,呈现结果.
F.提高服务器相应速度
对于需快速响应的文件,把其放入快速响应的服务器,应该是不错的方案,优化方案请系统储备组提供.
G.通过版本化控制客户端Cache
通常js/css这类文件改动比较频繁,但是为了加载速度变快,我们有可能需要设定这类文件的过期时间为几天后,这样我们碰到的问题就是,如何及时更新这些在cache的文件?
通过一个简单的配置,通过修改JS的版本来及时告诉浏览器,这些文件必须重新请求了,不要继续使用浏览器cache中的数据. 方案有好几个:

手动改这些js的文件名
手动改这些js的路径
通过URL Rewrite方式来改重定位js路径
通过一个在高响应服务器上的一个js配置告知页面,这个页面该链接哪些JS文件
大版本不变,小版本不断追加,等一定时间后,统一更新,高效利用cache

标注

meizz的js framework还没出正式版,有兴趣在CSDN的页面翻一下
Firefox修正方式

1
2
3
4
5
6
7
8
9
10
11
function addHTML(oParentNode, sHTML) {
if(window.addEventListener) {// for MOZ
var oRange = oParentNode.ownerDocument.createRange();
oRange.setStartBefore(oParentNode);
var oFrag = oRange.createContextualFragment(sHTML);
oParentNode.appendChild(oFrag);
}
else {// for IE5+
oParentNode.insertAdjacentHTML("BeforeEnd", sHTML);
}
}

转载于:http://www.blueidea.com/tech/site/2007/4822.asp


关于博主

姓名:郑玏

性别:男

职业:程序员

爱好:KTV、乒乓球、台球、五子棋、围棋、编程

语言:中文、英语、闽南语

Email:

工作技能

  • 桌面语言:C、C++、C#、Java
  • Web语言:PHP、HTML/XHTML、CSS、Javascript
  • Xml相关:XML、XSLT、SCHEMA
  • 数据库相关:Mysql、MS Sql
  • 建模相关:UML
  • 擅长:正则表达式、Web相关语言、Xml相关、C、C++、C#、Mysql

 

2010-09月
« Aug    
 12345
6789101112
13141516171819
20212223242526
27282930  
  • 李鸿萱: 呵呵~~!好好休息吧~~!有空再聊啊~~!(话说,老大是厦大,还是嘉庚的? [...]
  • Jennal: @李鸿萱 哈哈,是啊,校友~ 居然会有校友用我的软件,真是荣幸~我去年 [...]
  • 李鸿萱: 囧,校友?真的假的?那才没建几年呢~~!我现在是大一升大二~~!在读日语 [...]
  • Jennal: @李鸿萱 好巧。。我也在那里上过学。。 [...]
  • 李鸿萱: 呵呵 是吗? 我现在在厦门漳州校区读大学, 正好夹中间~~! 话说,太多 [...]