2011-03-26 58 views
0

我遇到這樣的標記:jQuery的:選擇問題(最近)

<div class=gui> 
    <div class=form> 
     <div class=textbox></div> 
     <div class=textbox></div> 
     <div class=textbox></div> 
     <div class=selectbox></div> 
     <div class=selectbox></div> 
     <div class=button></div> 
    </div> 
</div> 

我想要做的是迭代的div,找到自己相應的父母。 像:

文本框>形式

選擇框>形式

按鈕>形式

形式> GUI

這裏是我的jQuery選擇:

var dParent = div.closest("div.form, div.gui"); 

它的作品不錯爲文本和選擇框,但不是爲表格。 奇怪的是,表格報告自己是父母而不是gui。

任何想法可能是錯的什麼?

感謝

+0

'父()'.... – 2011-03-26 16:18:04

+0

可惜我不能使用,因爲包裝的div和這樣的父母.. – Fuxi 2011-03-26 16:20:04

回答

2

div.each(function() { 
     alert($(this).attr('class') 
       + ' has parent ' 
       + $(this).parents('.form:first,.gui:first') 
         .attr('class') 
    ); 
    }); 

在查看實際例子.closest()將選擇與選擇器匹配的呼叫元素,因此當您撥打$('.form').closest('.form, .gui')時,它將自己返回.form,因爲它是最接近的。因此,你只需要從.parent()最接近撥打:?

var dParent = div.parent().closest("div.form, div.gui"); 

See example →

2
var parent = div.hasClass('form') ? div.closest('.gui') : div.closest('.form'); 

將是我最好的猜測,不知道什麼對結構。

0

Closest通過從當前元素開始並遍歷樹直到它找到與選擇器匹配的元素。當您從表單開始時,表單本身與選擇器相匹配,因此它被選中。因爲所有你想要做的就是找到父母,用適當的方法是parents一個選擇:

div.parents('.form:first,.gui:first'); 

使用,如:http://jsfiddle.net/tFqLE/