代码之家  ›  专栏  ›  技术社区  ›  chillitom Cee McSharpface

jQuery:查找具有匹配内容的祖先/同级树

  •  0
  • chillitom Cee McSharpface  · 技术社区  · 14 年前
    <table>
        <tbody>
          <tr>
         <td class="TargetRow">Not this one</td>
          </tr>
        </tbody>
        <tbody> ... </tbody>
        <tbody>
          <tr>
         <td class="TargetRow">This one</td>
          </tr>
        </tbody>
        <tbody> ... </tbody>
        <tbody>
            <tr class="ContextRow"> ... </tr>
        </tbody>
    </table>
    

    考虑到上面的HTML,我正试图找到一种方法来获取前面的内容 班级 . 例如,对于前面第一个包含 归还 td.TargetRow

    包含ContextRow时使用:

     jQuery(contextRow).parents("tbody").first()
    

    我现在怎么才能找到以前的兄弟姐妹呢 表格主体 tr.ContextRow ?

    如果有什么办法让我说 "td.TargetRow" 那就太理想了。

    4 回复  |  直到 14 年前
        1
  •  1
  •   user113716    14 年前

    我对你的描述有点困惑,但是当你说 “找到包含tr.ContextRow" <tbody> .contextRow 去拿它 .targetRow .

    如果这是你想要的,试试这个。

    jQuery(contextRow).parents("tbody:first")
                      .prevAll('tbody:has(tr.ContextRow):first td.TargetRow');
    

    td.TargetRow 那就做吧 'tbody:has(td.TargetRow):first td.TargetRow' .

        2
  •  1
  •   Mark Schultheiss    14 年前
    jQuery('.ContextRow').closest("tbody").siblings('tbody td.TargetRow:last'); 
    

    看它工作: http://jsfiddle.net/wU6h9/

        3
  •  0
  •   Ian Wetherbee    14 年前

    $(".ContextRow").closest("tbody").prevAll().find(".TargetRow").eq(0).css({color: "red"});

    这将返回单个最近的前一个 .TargetRow

    http://jsfiddle.net/LfWg3/3/

        4
  •  -2
  •   simplyharsh    14 年前

    Closest .closest()

    获取与选择器匹配的第一个祖先元素,从当前元素开始,在DOM树中向上。

    你的问题是,

    $('.ContextRow').closest('tbody').siblings('tbody td.TargetRow').last(); 
    

    它将返回一个对象(不像parents,它返回多个元素直到top),或者如果id没有找到一个,则返回零。