Snandy Stop, thinking is the essence of progress. RequireJS入门(二)

上一篇是把整个jQuery库作为一个模块。这篇来写一个自己的模块:选择器。

为演示方便这里仅实现常用的三种选择器id,className,attribute。RequireJS使用define来定义模块。

 

新建目录结构如下

这次新建了一个子目录js,把main.js和selctor.js放入其中,require.js仍然和index.html在同一级目录。

 

HTML 如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!doctype html>
<html>
     <head>
         <title>requirejs入门(二)</title>
         <meta charset= "utf-8" >
         <style type= "text/css" >
             .wrapper {
                 width: 200px;
                 height: 200px;
                 background: gray;
             }
         </style>
     </head>
     <body>
         <div class = "wrapper" ></div>
         <script data-main= "js/main"  src= "require.js" ></script>
     </body>
</html>

  

这次把script标签放到了div的后面,因为要用选择器去获取页面dom元素,而这要等到dom ready后。

因为把main.js放到js目录中,这里data-main的值须改为“js/main”。

 

selector.js 如下

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
define( function () {
 
     function  query(selector,context) {
         var  s = selector,
             doc = document,
             regId = /^ #[\w\-]+/,
             regCls = /^([\w\-]+)?\.([\w\-]+)/,
             regTag = /^([\w\*]+)$/,
             regNodeAttr = /^([\w\-]+)?\[([\w]+)(=(\w+))?\]/;
         
         var  context =
                 context == undefined ?
                 document :
                 typeof  context == 'string'  ?
                 doc.getElementById(context.substr(1,context.length)) :
                 context;
                 
         if (regId.test(s)) {
             return  doc.getElementById(s.substr(1,s.length));
         }
         // 略...
     }
     
     return  query;
});

 

define的参数为一个匿名函数,该匿名函数执行后返回query,query为函数类型。query就是选择器的实现函数。

 

main.js 如下

1
2
3
4
5
6
7
8
require.config({
     baseUrl: 'js'
});
 
require([ 'selector' ], function (query) {
     var  els = query( '.wrapper' );
     console.log(els)
});

  

require.config方法执行配置了baseUrl为“js”,baseUrl指的模块文件的根目录,可以是绝对路径或相对路径。这里用的是相对路径。相对路径指引入require.js的页面为参考点,这里是index.html。

 

把目录r2放到apache或其它web服务器上,访问index.html。

 

网络请求如下

 

main.js和selector.js都请求下来了。

selector.js下载后使用query获取页面class为“.wrapper”的元素,控制台输出了该元素。如下

 

总结:

  1. 使用baseUrl来配置模块根目录,baseUrl可以是绝对路径也可以是相对路径
  2. 使用define定义一个函数类型模块,RequireJS的模块可以是JS对象,函数或其它任何类型(CommonJS/SeaJS则只能是JS对象)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值