Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.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选择器吗?我想用attr x获得所有tr,它们直接位于给定tr的(同一级别)之下_Javascript_Jquery_Html_Jquery Selectors - Fatal编程技术网

Javascript 什么';这是正确的jQuery选择器吗?我想用attr x获得所有tr,它们直接位于给定tr的(同一级别)之下

Javascript 什么';这是正确的jQuery选择器吗?我想用attr x获得所有tr,它们直接位于给定tr的(同一级别)之下,javascript,jquery,html,jquery-selectors,Javascript,Jquery,Html,Jquery Selectors,我目前正在做一些类似于树的东西,我希望能够折叠/展开孩子们。我想最简单的方法是使用嵌套列表,但我不能使用它们,因为我无法访问HTML代码。这是相关的简化HTML代码: <table> <tbody> <tr rel="1"><td><a href="#" id="fold">fold</a> item 1</td></tr> <tr rel="2">

我目前正在做一些类似于树的东西,我希望能够折叠/展开孩子们。我想最简单的方法是使用嵌套列表,但我不能使用它们,因为我无法访问HTML代码。这是相关的简化HTML代码:

<table>
    <tbody>
        <tr rel="1"><td><a href="#" id="fold">fold</a> item 1</td></tr>
        <tr rel="2"><td><a href="#" id="fold">fold</a> item 1.1</td></tr>
        <tr rel="2"><td><a href="#" id="fold">fold</a> item 1.2</td></tr>
        <tr rel="1"><td>item 2</td></tr>
        <tr rel="1"><td><a href="#" id="fold">fold</a> item 3</td></tr>
        <tr rel="2"><td><a href="#" id="fold">fold</a> item 3.1</td></tr>
        <tr rel="3"><td>item 3.1.1</td></tr>
        <tr rel="3"><td>item 3.1.2</td></tr>
</tbody>
</table>

项目1
项目1.1
项目1.2
项目2
项目3
项目3.1
项目3.1.1
项目3.1.2
如您所见,没有嵌套项,但有“级别”可用,所以我想应该可以实现我的想法。折叠/展开部分正在工作,例如,当我在项目1上单击“折叠”时,rel>=2的项目被隐藏。但那不是我想要的;我只想折叠rel高于单击“折叠”的项目,并想隐藏所有项目,直到我到达rel低于或等于当前rel的元素

例如,当我在项目1中单击“折叠”时,项目1.1和1.2应隐藏,但项目3.1应保持可见

有人能帮我开始吗?谢谢


b约恩

我不认为用一个选择器就可以实现这一点。这是我的方法:请注意,我将您的
id=“fold”
更改为
class=“fold”
,因为具有相同值的多个id是无效的。ID应该是唯一的

我在这里做的是(基本上):

  • 获取所单击行的级别
  • 遍历以下所有行。对于每个do:
    • 检查标高是否更高(如嵌套更深);如果为true,则切换可见性,否则中止遍历

我认为单用一个选择器无法实现这一点。这是我的方法:请注意,我将您的
id=“fold”
更改为
class=“fold”
,因为具有相同值的多个id是无效的。ID应该是唯一的

我在这里做的是(基本上):

  • 获取所单击行的级别
  • 遍历以下所有行。对于每个do:
    • 检查标高是否更高(如嵌套更深);如果为true,则切换可见性,否则中止遍历

类似的方法应该可以奏效

$("#fold").click(function()
{
    var _current = $(this).parent().parent();
    var _level = _current.attr('rel');

    _current.nextAll().each(function()
    {
        if($(this).attr('rel') > _level){
            $(this).hide();
        }else{
            // Nested children stopped here, we don't continue
            return false;
        }
    });        
});

像这样的东西应该有用

$("#fold").click(function()
{
    var _current = $(this).parent().parent();
    var _level = _current.attr('rel');

    _current.nextAll().each(function()
    {
        if($(this).attr('rel') > _level){
            $(this).hide();
        }else{
            // Nested children stopped here, we don't continue
            return false;
        }
    });        
});

谢谢,这是有效的,我试图解决问题的方式很难!:)小提示:我将您的
fold
-ID更改为类,因为ID必须是唯一的,并且不能多次使用。我相应地编辑了我的文章。我已经在代码中看到了它,已经修复了它(但不是这样),谢谢你指出了这一点。谢谢,这是有效的,我正在努力解决困难的问题!:)小提示:我将您的
fold
-ID更改为类,因为ID必须是唯一的,并且不能多次使用。我相应地编辑了我的文章。我已经在代码中看到了它,已经修复了它(但不是这样),谢谢你指出这一点。