1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title>使用jQuery</title> 6 <script type="text/javascript" src="jquery-1.10.1.js"></script> 7 </head> 8 <body> 9 <div>空白div</div> 10 <p>aaa</p> 11 <p>bbb</p> 12 <p>ccc</p> 13 <p>ddd</p> 14 <div id="box"class="box">测试div 15 <p>aaa</p> 16 <p>bbb</p> 17 <p>ccc</p> 18 <p>ddd</p> 19 </div> 20 <p>aaa</p> 21 <p>bbb</p> 22 <p>ccc</p> 23 <p>ddd</p> 24 <div id="box"class="box">测试div 25 <p>aaa</p> 26 <p>bbb</p> 27 <p>ccc</p> 28 <p>ddd</p> 29 </div> 30 <div id="box"class="box">测试div</div> 31 <p>aaa</p> 32 <p>bbb</p> 33 <p>ccc</p> 34 <p>ddd</p> 35 <script type="text/javascript"> 36 /*$('#box').click(function(){ 37 alert("ok!"); 38 }).css('color' , 'red').css('margin', '100px');*/ 39 40 // alert($); 41 // alert($()); 42 // alert($('#box')); 43 44 // alert(document.getElementById('box')); 45 //alert($('#box').get(0)); 46 //alert($(document.getElementById('box'))); 47 // $('#box').css('color', 'red'); 48 // $('div').css('color', 'red'); 49 // alert($('div').size()); 50 //alert($('#box').size()); 51 //alert($('.box').size()); 52 // alert($('.box').length); 53 // alert($('#box').length); 54 // $('#box > p').css('color', 'blue'); 55 // $('*').css('color', 'red'); 56 // $('#box').find('p').css('color', 'red'); 57 // $('.box').children('p').css('color', 'red'); 58 // $('.box').find('p').css('color', 'red'); 59 // $('#box+p').css('color', 'red'); 60 // $('#box').next('p').css('color', 'red'); 61 // $('#box~p').css('color', 'red'); 62 // $('#box').nextAll('p').css('color', 'red'); 63 /*next 和nextAll 选择器,必须是同一个层次的后一个 64 和后N 个,不在同一个层次就无法选取到了。*/ 65 /*在find()、next()、nextAll()和children()这四个方法中,如果不传递参数,就相当于传递 66 了“*”,即任何节点,我们不建议这么做,不但影响性能,而且由于精准度不佳可能在复杂的HTML 结构时产生怪异的结果。*/ 67 // $('#box').next().css('color', 'red'); 68 // $('#box').prev('p').css('color', 'red'); 69 // $('#box').prevAll('p').css('color', 'red'); 70 //$('#box').prevUntil('p').css('color', 'red'); 71 // $('#box').nextUntil('p').css('color', 'red'); 72 // $('#box').siblings('p').css('color', 'red'); 73 /*警告:切不可写成“$('#box').prevAll('p').nextAll('p').css('color', 'red');”这种形式,因为 74 prevAll('p')返回的是已经上方所有指定元素,然后再nextAll('p')选定下方所有指定元素,这 75 样必然出现错误。*/ 76 /*选择器快慢分析: 77 //这条最快,会使用原生的getElementById、ByName、ByTagName 和querySelectorAll() 78 $('#box').find('p'); 79 //jQuery 会自动把这条语句转成$('#box').find('p'),这会导致一定的性能损失。它比最快 80 的形式慢了5%-10% 81 $('p', '#box'); 82 //这条语句在jQuery 内部,会使用$.sibling()和javascript 的nextSibling()方法,一个个遍 83 历节点。它比最快的形式大约慢50% 84 $('#box').children('p'); 85 //jQuery 内部使用Sizzle 引擎,处理各种选择器。Sizzle 引擎的选择顺序是从右到左, 86 所以这条语句是先选p,然后再一个个过滤出父元素#box,这导致它比最快的形式大约慢 87 70% 88 $('#box > p'); 89 //这条语句与上一条是同样的情况。但是,上一条只选择直接的子元素,这一条可以于 90 选择多级子元素,所以它的速度更慢,大概比最快的形式慢了77%。 91 $('#box p'); 92 ////jQuery 内部会将这条语句转成$('#box').find('p'),比最快的形式慢了23%。 93 $('p', $('#parent')); 94 综上所属,最快的是find()方法,最慢的是$('#box p')这种高级选择器。如果一开始将 95 $('#box')进行赋值,那么jQuery 就对其变量进行缓存,那么速度会进一步提高。 96 var box = $('#box'); 97 var p = box.find('p'); 98 注意:我们应该推荐使用哪种方案呢?其实,使用哪种都差不多。这里,我们推荐使用 99 jQuery 提供的方法。因为不但方法的速度比高级选择器运行的更快,并且它的灵活性和扩展 100 性要高于高级选择器。使用“+”或“~”从字面上没有next 和nextAll 更加语义化,更加清 101 晰,jQuery 的方法更加丰富,提供了相对的prev 和prevAll。毕竟jQuery 是编程语言,需要能够灵活的拆分和组合选择器,而使用CSS 模式过于死板。所以,如果jQuery 提供了独立 102 的方法来代替某些选择器的功能,我们还是推荐优先使用独立的方法。 103 */ 104 105 </script> 106 </body> 107 </html>