$('#list > li').addClass('horiz')
# 放在這裡,這樣寫就會無效,為什麼呢?
因為此時程式碼執行到js腳本的時候,body中的頁面還沒有渲染,$('#list>li')根本無法取得到元素
所以要放在頁面渲染結束,DOM樹生成再執行才會有效
那麼如何才能做到在head中也可以執行呢?有二種方法:
# 1. 使用window物件的onload事件:在頁面元素載入完成,再調用這個js腳本(延遲呼叫)
window.onload = function () { $('#list > li').addClass('horiz') }
那麼在jquery中有沒有同樣功能的方法呢?當然有,不僅有,而且效率更高:ready()
$(document).ready(function () { $('#list > li').addClass('horiz') })
簡寫:
$(function(){ //jq代码 $('#list > li').addClass('horiz') })
當然,如果將jquery程式碼寫在html文檔的底部,就不這樣麻煩了,但還是推薦將程式碼用$(function(){})封裝
# 為什麼說:$(document).ready()方法比window.onload事件更有效率呢?
html頁產生分為二步:
1. 產生DOM樹: 告訴瀏覽器html檔案中有多少元素以及他們之間的關係
2. 載入外部資源: 例如圖片,外部檔案等
window.onload事件必須要在dom樹生成,外部資源全部加載完畢才可以觸發
$().ready()事件:只要DOM創建完成就可以觸發,不必等到元素全部加載完成,特別是有較大圖片或文件時,效果非常明顯
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>jquery代码的执行方式</title> <style type="text/css"> .horiz { float:left; list-style: none; margin: 10px; } </style> <script type="text/javascript" src="../js/jquery-3.3.1.js"></script> <script type="text/javascript"> $(function(){ //jq代码 $('#list > li').addClass('horiz') }) </script> </head> <body> <h2>购物清单</h2> <ul id="list"> <li>生活用品 <ul> <li><a href="">淘宝</a></li> <li>箱包</li> <li>衣服</li> <li>鞋子</li> </ul> </li> <li>数码产品 <ul> <li><a href="">京东</a></li> <li>笔记本电脑</li> <li>显示器</li> </ul> </li> <li>食品保健 <ul> <li><a href="">拼多多</a></li> <li>奶粉</li> <a href="">玩具</a> </ul> </li> </ul> <!-- <script type="text/javascript" src="../js/jquery-3.3.1.js"></script> --> <script type="text/javascript"> // $('#list > li').addClass('horiz') // $(document).ready(function(){ // //这里放jQuery代码:将列表水平摆放 // $('#list > li').addClass('horiz') // }) </script> </body> </html>
以上是jquery程式碼的執行方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!