2012-12-09 28 views
1

我有這樣的文本功能解析jQuery的元件包含括號

() (() (()) (())) 

Pratically每個支架是一個跨度和我所著此代碼來組織嵌套結構:

myobj.each(function(i) { 

    var isOpen = $(this).text() == '(' ? true: false; 

    if(isOpen) { 
     console.log(' open at: ' + index ) 
     index++; 
     closer = index; 
    } else { 
     closer--; 
     console.log('close at: ' + (closer)); 
    } 

}); 

假設expeted輸出將是:

0 0 1 2 2 3 4 4 3 5 6 6 5 1 
() (() (()) (())) 

它給我:

0 0 1 2 2 3 4 4 3 5 6 6 5 4 
() (() (()) (())) 

注意最後一個支架..爲什麼?

+1

你只是減少一個類型,你如何期待它從5到1? 你保持不括號的數量支架起源,可以考慮使用一個堆棧數據結構 –

+0

是的,我知道,但我必須知道浩,我可以先執行該指令.. – koMah

回答

1

將未封閉(剛剛打開)括號的索引存儲在一個數組中,然後使用pop在關閉時獲取最後一個未封閉的索引。

var index = -1, unclosed = [], log = []; 
myobj.each(function() { 
    if ($(this).text() === '(') { 
     index++; 
     console.log('Open at: ' + index); 
     unclosed.push(index); 
     log.push(index); 
    } else { 
     var closer = unclosed.pop(); 
     console.log('Closed at: ' + closer); 
     log.push(closer); 
    } 
}); 
console.log(log); //[0, 0, 1, 2, 2, 3, 4, 4, 3, 5, 6, 6, 5, 1] 

Fiddle

上述log只是用於示出最終的結果,那些3線+聲明稍後可以除去。

+0

謝謝@法布里西奧磨砂的回答,但它不是我搜索的內容.. 您在日誌中存儲的索引實際上是一組span元素..我會爲其分配一個懸浮元素:例如,如果over 1,則應該突出顯示相對1。 這種方式的要點是,我不能像[[0,0],[1,1] .....]這樣的數組存儲這些元素。我怎麼能做到這一點?感謝 – koMah

+0

解決:這裏提琴http://jsfiddle.net/khela/C2GkL/6/ – koMah

+0

@koMah很高興我的算法的幫助下,你也可以使用一個對象,而不是一個數組的數組,使代碼稍微簡單:HTTP: //jsfiddle.net/C2GkL/8/我也將懸停效果添加到右括號中。 –