解析jQuery元素的函数包含括号

时间:2012-12-09 22:13:45

标签: javascript nested brackets

我有这个文字

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

实际上每个括号都是一个span,我已经编写了这个代码来组织嵌套结构:

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 ) );
    }

});

假设输出的输出为:

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 个答案:

答案 0 :(得分: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行+声明。