7. 冒泡 除非在特殊情况下, 否则每一个js事件(例如:click, mouseover, 等.)都会冒泡到父级节点. 当我们需要给多个元素调用同个函数时这点会很有用. 代替这种效率很差的多元素事件监听的方法就是, 你只需向它们的父节点绑定一次, 并且可以计算出哪个节点触发了事件. 例如, 我们要为一个拥有很多输入框的表单绑定这样的行为: 当输入框被选中时为它添加一个class 像这样绑定事件是低效的: $(‘#entryform input).bind(’focus‘, function(){$(this).addClass(’selected‘); }).bind(’blur‘, function(){ $(this).removeClass(’selected‘); }); 我们需要在父级监听获取焦点和失去焦点的事件: $(‘#entryform’).bind(‘focus’, function(e){ 父级元素扮演了一个调度员的角色, 它可以基于目标元素绑定事件. 如果你发现你给很多元素绑定了同一个事件监听, 那么你肯定哪里做错了. 8.消除无效查询 尽管jquery可以很优雅的处理没有匹配元素的情况, 但它还是需要花费时间去寻找. 如果你整站只有一个全局js, 那么极有可能把所有的jquery函数塞进$(document)ready(function(){//所有你引以为傲的代码})里. 只运行在页面里用到的函数. 大多数有效的方法就是使用行内初始化函数, 这样你的模板就能准确的控制何时何处该执行js. 例如, 你的”文章”页面模板, 你可能会引用如下的代码在body结束处: <script type=“text/javascript>mylib.article.init(); </script> </body> 如果你的页面模板包含一些多变的模块可能不会出现在页面中, 或者为了视觉呈现的原因你需要它们能够快速加载, 你可以将初始化函数紧跟在模块之后. <ul id=“traffic_light”><li><input type=“radio” class=“on” name=“light” value=“red” /> Red</li> <li><input type=“radio” class=“off” name=“light” value=“yellow” /> Yellow</li> <li><input type=“radio” class=“off” name=“light” value=“green” /> Green</li> </ul> <script type=“text/javascript> mylib.traffic_light.init(); </script> 你的全局js库可能会是这样子的: var mylib = |