jQuery遍歷之closest()方法
以選定的元素為中心,往內(nèi)查找可以通過find、children方法。如果往上查找,也就是查找當(dāng)前元素的父輩祖輩元素,jQuery提供了closest()方法,這個(gè)方法類似parents但是又有一些細(xì)微的區(qū)別,屬于使用頻率很高的方法
closest()方法接受一個(gè)匹配元素的選擇器字符串
從元素本身開始,在DOM 樹上逐級(jí)向上級(jí)元素匹配,并返回最先匹配的祖先元素
例如:在div元素中,往上查找所有的li元素,可以這樣表達(dá)
$("div").closet("li')
注意:jQuery是一個(gè)合集對(duì)象,所以通過closest是匹配合集中每一個(gè)元素的祖先元素
closest()方法給定的jQuery集合或元素來過濾元素
同樣的也是因?yàn)閖Query是合集對(duì)象,可能需要對(duì)這個(gè)合集對(duì)象進(jìn)行一定的篩選,找出目標(biāo)元素,所以允許傳一個(gè)jQuery的對(duì)象
注意事項(xiàng):在使用的時(shí)候需要特別注意下
粗看.parents()和.closest()是有點(diǎn)相似的,都是往上遍歷祖輩元素,但是兩者還是有區(qū)別的,否則就沒有存在的意義了
起始位置不同:closest開始于當(dāng)前元素 parents開始于父元素遍歷的目標(biāo)不同:
closest要找到指定的目標(biāo),parents遍歷到文檔根元素,closest向上查找,直到找到一個(gè)匹配的就停止查找,parents一直查找到根元素,并將匹配的元素加入集合
結(jié)果不同:closest返回的是包含零個(gè)或一個(gè)元素的jquery對(duì)象,parents返回的是包含零個(gè)或一個(gè)或多個(gè)元素的jquery對(duì)象
下面我們來看一段代碼
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <title></title> <style> .left { width: auto; height: 200px; } .left div { width: 350px; height: 150px; padding: 5px; margin: 5px; float: left; background: #bbffaa; border: 1px solid #ccc; } span { color: blue; } </style> <script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script> </head> <body> <h2>closest方法()</h2> <div class="left first-div"> <div class="div"> <ul class="level-2"> <li class="item-a">A</li> <li class="item-b">B <ul class="level-3"> <li class="item-1">1</li> <li class="item-2">2</li> <li class="item-3">3</li> </ul> </li> <li class="item-c">C</li> </ul> </div> </div> <br/> <button>點(diǎn)擊:closest傳遞選擇器 </button> <button>點(diǎn)擊:closest傳遞一個(gè)元素對(duì)象</button> <script type="text/javascript"> $("button:first").click(function() { $('li.item-1').closest('.level-2').css('border', '1px solid red'); }) </script> <script type="text/javascript"> $("button:last").click(function() { var itemB = $('.item-b') $('li.item-1') .closest(itemB) .css('border', '1px solid blue'); }) </script> </body> </html>