存档

‘javascript’ 分类的存档

深入理解 JavaScript闭包(closure)

2010年7月2日 10V 1 条评论

最近在网上查阅了不少Javascript闭包(closure)相关的资料,写的大多是非常的学术和专业。对于初学者来说别说理解闭包了,就连文字叙述都很难看懂。撰写此文的目的就是用最通俗的文字揭开Javascript闭包的真实面目。

一、什么是闭包?
“官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
相信很少有人能直接看懂这句话,因为他描述的太学术。其实这句话通俗的来说就是:JavaScript中所有的function都是一个闭包。不过一般来说,嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的“闭包”。看下面这段代码:

function a() {
    var i = 0;
    function b() {
        alert(++i);
    }
    return b;
}
var c = a();
c();

阅读全文…

javascript常用正则表达式

2010年7月1日 10V 没有评论

正则表达式用于字符串处理,表单验证等场合,实用高效,但用到时总是不太把握,以致往往要上网查一番。这里整理出了一些常用的表达式收藏在这里,作备忘之用。

匹配中文字符的正则表达式: [\u4e00-\u9fa5]

匹配双字节字符(包括汉字在内):[^\x00-\xff]

应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

String.prototype.len=function(){return this.replace([^\x00-\xff]/g,”aa”).length;}

匹配空行的正则表达式:\n[\s| ]*\r

匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/

匹配首尾空格的正则表达式:(^\s*)|(\s*$)

应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:

String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, “”);
}

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

利用正则表达式去除字串中重复的字符的算法程序:
var s=”abacabefgeeii”
var s1=s.replace(/(.).*\1/g,”$1″)
var re=new RegExp(”["+s1+"]“,”g”)
var s2=s.replace(re,”")
alert(s1+s2) //结果为:abcefgi
思路是使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,两者串连。这个方法对于字符顺序有要求的字符串可能不适用。

得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1
s=”http://www.gzcynet/page1.htm”
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,”$2″)
alert(s)

用正则表达式限制只能输入中文:onkeyup=”value=value.replace(/[^\u4E00-\u9FA5]/g,”)” onbeforepaste=”clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^\u4E00-\u9FA5]/g,”))”

用正则表达式限制只能输入全角字符: onkeyup=”value=value.replace(/[^\uFF00-\uFFFF]/g,”)” onbeforepaste=”clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^\uFF00-\uFFFF]/g,”))”

用正则表达式限制只能输入数字:
onkeyup=”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,”))”

作者: 石巍
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。

本文链接: http://www.smartwei.com/javascript-reg.html

XPath 知识入门 – jQuery使用XPath

2010年5月11日 10V 没有评论

jQuery可以通过类似于CSS或者xPath的语法来获取页面中的元素。在本文中,一起来比较和学习使用 XPath 1.0 和 jQuery 1.4 处理类似的任务,让您能够在必要的时候从其中一个快速转向另一个。

例子

整篇文章中,都会回过头来参考一个方便的样例 XML 文档,参见 清单 1。此书籍列表包括各种信息,比如作者、两种完全虚构的价格和书名。
清单1: 样例 XML 文档 (book.xml)


<?xml version="1.0" encoding="utf-8"?>
<catalog>
    <book format="trade">
        <name>Jennifer Government</name>
        <author>Max Barry</author>
        <price curr="CAD">15.00</price>
        <price curr="USD">12.00</price>
    </book>

    <book format="textbook">
        <name>Unity Game Development Essentials</name>
        <author>Will Goldstone</author>
        <price curr="CAD">52.00</price>
        <price curr="USD">45.00</price>
    </book>

    <book format="textbook">
        <name>UNIX Visual QuickPro</name>
        <author>Chris Herborth</author>
        <price curr="CAD">15.00</price>
        <price curr="USD">10.00</price>
    </book>
</catalog>

阅读全文…

分类: javascript 标签: , ,

JavaScript 面向对象编程(1)– 基础

2010年4月29日 10V 没有评论

自从有了Ajax这个概念,JavaScript作为Ajax的利器,其作用一路飙升。JavaScript最基本的使用,以及语法、浏览器对象等等东东在这里就不累赘了。把主要篇幅放在如何实现JavaScript的面向对象编程方面。

1. 用JavaScript实现类

JavaScritpt没有专门的机制实现类,这里是借助它的函数允许嵌套的机制来实现类的。一个函数可以包含变量,又可以包含其它函数,这样,变量可以作为属性,内部的函数就可以作为成员方法了。因此外层函数本身就可以作为一个类了。如下:

function myClass()
{
//此处相当于构造函数
}

这里 myClass就是一个类。其实可以把它看成类的构造函数。至于非构造函数的部分,以后会详细描述。
阅读全文…

分类: javascript 标签:

强大的jQuery选择器

2010年4月2日 10V 没有评论

用过jquery的朋友肯定会发现,jquery的选择器非常强大,在html页面进行DOM操作时,很容易的就能娶到我们要的元素。现在给大家展示一下jquery都提供了那些选择器:
阅读全文…

分类: javascript 标签: ,

jQuery框架中$.each()函数的应用

2010年4月2日 10V 1 条评论

最近在做中国教育在线的培训机构项目,开发工作中需要做一个开课时间表, 效果图如下所示:

js-schedule

如果直接写html代码,麻烦是麻烦点,但是这个表单很好实现。这两天在看jquery的相关知识,发现其中的$.each()这个函数功能十分强大,这里先对$.each()函数做个简单介绍,然后在给大家看一下,我是如何用$.each()这个函数实现上面这个表单的。

可以代替for循环的$.each()

$.each()函数封装了十分强大的遍历功能,它可以遍历一维数组、多维数组、DOM, JSON 等等,在javascript开发过程中使用$each可以大大的减轻我们的工作量。下面看几个例子:

var arr1 = [ &quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;four&quot;, &quot;five&quot; ];
$.each(arr1, function(){
    alert(this);
});
//输出:one   two  three  four   five

var arr2 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
$.each(arr2, function(i, item){
    alert(item[0]);
});
//输出:1   4   7

var obj = { one:1, two:2, three:3, four:4, five:5 };
$.each(obj, function(key, val) {
    alert(obj[key]);
});
//输出:1   2  3  4  5
使用$.each()实现前面提到的表单
//引入jquery,根据你的jquery文件的不同路径,做出相应的替换,
&lt;script type=&quot;text/javascript&quot; src=&quot;/js/jquery-1.3.min.js&quot;&gt;&lt;/script&gt;

var weekday = ['','周一','周二','周三','周四','周五','周六','周日'];

var day = ['','上午','下午','晚上'];

var table = document.createElement('table');

$(table).attr({ width:&quot;400&quot;, border:&quot;0&quot;, cellpadding:&quot;0&quot;, cellspacing:&quot;1&quot;, bgcolor:&quot;#CCCCCC&quot;});
$.each(day, function(key, val) {
	var row = table.insertRow(key);
	if(key == 0) {
	       $.each(weekday, function(m, n) { n = n || '&amp;nbsp;'; $(row.insertCell(m)).html(n); });
	}
        else {
	       $.each(weekday, function(m, n) { n = !n?day[key]:'&lt;input type=&quot;checkbox&quot; name=&quot;classtime[]&quot; /&gt;'; $(row.insertCell(m)).html(n); });
	}
});

//在id=calendarDiv的那个DIV中嵌入上面的代码
$('#calendarDiv').append(table);

效果如下所示:


作者: 石巍
原载: 10V
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。

本文链接: http://www.smartwei.com/jquery-each-function.html

分类: javascript 标签: ,

不同浏览器使用javascript解析XML

2010年3月21日 10V 没有评论

xml-icon 最近打算学习一下SOAP,需要用到XML的相关知识,趁这个机会,看了一些XML相关的内容,这篇文章就记录一下以前没有注意到的XML的相关知识,特别是针对不同浏览器如何使用Javascript解析XML。
阅读全文…

分类: javascript 标签: ,

javascript权威指南读书笔记

2010年2月22日 10V 没有评论

一直以来javascript都是我的弱项,虎年了,打算好好的学习一下js的相关知识。google了一下,很多朋友推荐《javascript权威指南》这本书,从今天开始,从头把js学习一下,看到第7章了,读书笔记如下:
1. 用for/in结构可以遍历一个对象的所有属性

2. 值NaN永远不会与其他任何值等同,包括它自身。要检测一个值是不是NaN,可以使用全局函数isNaN()

3. javascript核心语言内部通常先尝试valueof()转换、再尝试toString()转换,但对于Date类,则限制性toString()转换
阅读全文…