2014-02-09 19 views
0

我正在組織圖表般的結構。所有div具有獨特的ID和匹配他們的父母的ID(如果有)類,像這樣:nextAll()返回undefind - jQuery

<div id="title1" class="container"></div> 
<div id="title4" class="container child title3"></div> 
<div id="title3" class="container child title2"></div> 
<div id="title2" class="container child title1"></div> 

想法是絕對定位自己的父母DIV下面的div訂購這些以圖表,所以他們將按照正確的順序渲染。

問題與下面的代碼是$test_str返回未定義,即使我通過.child作爲選擇器...我卡住了。

$containers = $('.container'); 
$test = []; 
for (i = 0; i < $containers.length; i++) { 
    $test_str = $($containers[i]).nextAll('.' + $containers[i].id); 
    $test.push($test_str); 
    console.log($containers[i].id + ' is parent ' + $test[i].id); 
    //$test[i].id is returned as undefined; 
} 

這裏是fiddle

+3

凡有你'使用的findAll()'。 –

+1

ahhh我的錯誤,我馬上編輯瓷磚... –

+0

嘗試http://jsfiddle.net/arunpjohny/9KNqK/1/ –

回答

1

我會採取一種方法,只使用appendToinsertAfter來移動div,而不是試圖絕對定位它們(​​我認爲這會更困難)。此示例使用appendTo,因爲它創建實際的父子結構,而不是簡單地重新排序。

$.each($('.container'), function(ind, val) { 
    $.each($('.' + val.id), function(i,v) { 
     console.log(val.id + ' is parent ' + v.id); 
     $(v).appendTo(val); 
    }); 
}); 

JSFiddle

+0

我的朋友你救了我! –

0

如果輸出的$ test_str到控制檯,元素信息是根據上下文,所以你會想從$test[i].context.id

$containers = $('.container'); 
$test = []; 
for (i = 0; i < $containers.length; i++) { 
    jQuery.fn.init(); 
    $test_str = $($containers[i]).nextAll('.' + $containers[i].id); 
    $test.push($test_str); 
    console.log($containers[i].id + ' is parent ' + $test[i].context.id); 
} 
0

獲得ID您遇到的問題是nextAll()返回一系列項目,您將其視爲單個項目。你可能會碰到的第二個問題是你使用nextAll()而不是siblings()。

siblings

說明:獲取每個元素的兄弟姐妹中匹配的元素,任選地通過一個選擇器過濾的。

nextAll()僅返回同級別的繼任者而不是兄弟姐妹。

描述:獲取匹配元素集合中每個元素的所有後續兄弟元素,可以通過選擇器進行過濾。

下面是顯示獲得所需結果方法的代碼。我暫時拿出了中間數組,因爲這會讓這變得更加複雜。

$containers = $('.container'); 

$test = []; 
for (i = 0; i < $containers.length; i++) { 
    $test_str = $($containers[i]).siblings('.' + $containers[i].id); 
    console.log($test_str); 

    for(j = 0; j < $test_str.length; j++){ 
     console.log($containers[i].id + ' is parent ' + $test_str[j].id); 
    } 
} 

使用jQuery處理,大部分的時間函數將返回的項目,而不是單個項目的順序,即使只有一個匹配時,請記住。