jQuery抽象方法追踪(3) Feb 20, 2016 w3school例3jQuery中ajax的实现 <!DOCTYPE html> <html> <head> <script src="/jquery/jquery-1.11.1.min.js"> </script> <script> $(document).ready(function(){ $("#btn1").click(function(){ $('#test').load('/example/jquery/demo_test.txt'); }) }) </script> </head> <body> <h3 id="test">请点击下面的按钮,通过 jQuery AJAX 改变这段文本。</h3> <button id="btn1" type="button">获得外部的内容</button> </body> </html> 最终代码后如下: <!DOCTYPE html> <html> <head> <script> $(document).ready(function(){ $("#btn1").click(function(){ $('#test').load('demo_test.txt'); }) }) function $(selector) { function makeQ(selector) { var nodes = {}; //应该写个匹配css选择器的正则 if(typeof selector === "string") { if(selector[0] === "#") { this[0] = document.getElementById(selector.substr(1)); } else if(selector[0] === ".") { nodes = document.getElementsByClassName(selector.substr(1)); } else { nodes = document.getElementsByTagName(selector); } for(var i=0; i< nodes.length; i++) { this[i] = nodes[i]; } } else if(selector === document){ this[0] = selector; this.ready = function(callback) { this[0].addEventListener('DOMContentLoaded', callback); } } else { this[0] = selector; } } makeQ.prototype = { click:function(callback) { this._each("onclick", callback); }, hide:function() { this.css("display", "none"); }, load:function(url) { var xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange = ajaxHandler.bind(this); xmlhttp.open("GET",url,true); xmlhttp.send(null); function ajaxHandler() { if (xmlhttp.readyState==4) {// 4 = "loaded" if (xmlhttp.status==200) {// 200 = "OK" this._each("innerHTML",xmlhttp.responseText); } else { alert("Problem retrieving data:" + xmlhttp.statusText); } } } }, _each:function(attr, value) { for(var i in this) { if(!isNaN(i)) { this[i][attr] = value; } } }, css:function(attr, val) { for(var i in this) { if(!isNaN(i)) { this[i].style[attr] = val; } } } } return new makeQ(selector); } </script> </head> <body> <h3 id="test">请点击下面的按钮,通过 jQuery AJAX 改变这段文本。</h3> <button id="btn1" type="button">获得外部的内容</button> </body> </html>