上一篇是把整個jQuery庫作為一個模塊。這篇來寫一個自己的模塊:選擇器。
為演示方便這里僅實現常用的三種選擇器id,className,attribute。RequireJS使用define來定義模塊。
新建目錄結構如下
這次新建了一個子目錄js,把main.js和selctor.js放入其中,require.js仍然和index.html在同一級目錄。
HTML 如下
<!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 如下
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 如下
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”的元素,控制台輸出了該元素。如下
總結:
- 使用baseUrl來配置模塊根目錄,baseUrl可以是絕對路徑也可以是相對路徑
- 使用define定義一個函數類型模塊,RequireJS的模塊可以是JS對象,函數或其它任何類型(CommonJS/SeaJS則只能是JS對象)
感興趣的請繼續閱讀 下一篇 。