Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析jQuery元素的函数包含括号_Javascript_Nested_Brackets - Fatal编程技术网

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

Javascript 解析jQuery元素的函数包含括号,javascript,nested,brackets,Javascript,Nested,Brackets,我有这篇课文 ( ) ( ( ) ( ( ) ) ( ( ) ) ) 实际上,每个括号都是一个跨度,我编写了以下代码来组织嵌套结构: myobj.each(function(i) { var isOpen = $( this ).text( ) == '(' ? true: false; if( isOpen ) { console.log( ' open at: ' + index ) index++; closer =

我有这篇课文

( ) ( ( ) ( ( ) ) ( ( ) ) )
实际上,每个括号都是一个跨度,我编写了以下代码来组织嵌套结构:

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
( ) ( ( ) ( ( ) ) ( ( ) ) )
请注意最后一个括号。。为什么?

将未关闭(刚刚打开)的括号索引存储在数组中,然后在关闭时使用以获取最后一个未关闭的括号

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]

上面的
日志
仅用于显示最终结果,这3行+声明可以稍后删除。

将未关闭(刚刚打开)的括号索引存储在一个数组中,然后在关闭时使用以获取最后一个未关闭的括号

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]


上面的
日志
只是为了显示最终结果,这3行+声明可以稍后删除。

您只是将每种类型减少一行,您希望它如何从5变为1?你保持括号的数目不是括号原点,考虑使用堆栈数据结构,是的,我知道,但是我必须知道HO我可以先执行这个指令。你只把它减少到每种类型,你希望它从5到1?你保持括号的数目而不是括号原点,考虑使用堆栈数据结构,是的,我知道,但是我必须知道HO我可以先执行这个指令..谢谢@ Fabr Isio MaTeEe你的答案,但它不是我所搜索的…存储在日志中的索引实际上是一组span元素。。我会给它指定一个悬停元素:例如,如果在1上,相对的1应该高亮显示。这种方式的要点是,我不能将这些元素存储在像[[0,0]、[1,1]…]这样的数组中。我怎么能做到?Thanks@koMah很高兴我的算法有帮助,你也可以使用一个对象而不是数组数组来简化代码:我还在右括号中添加了悬停效果。也可以不使用索引和额外的迭代:感谢@Fabricio Matté的回答,但这不是我搜索的。。存储在日志中的索引实际上是一组span元素。。我会给它指定一个悬停元素:例如,如果在1上,相对的1应该高亮显示。这种方式的要点是,我不能将这些元素存储在像[[0,0]、[1,1]…]这样的数组中。我怎么能做到?Thanks@koMah很高兴我的算法有所帮助,您还可以使用一个对象而不是数组数组来简化代码:我还将悬停效果添加到右括号中。也可以不使用索引和额外的迭代: