2

我正在自定义 Sage CRM,因此我无法控制编写的 HTML,也无法将 ID 或类添加到 CRM 吐出的表格布局中。我想根据用户对选择下拉列表的选择隐藏更高(不是顶级)级别的表。我只能将 jQuery 选择器连接到我要隐藏的表中的表的标题行。

DOM 类似于:

//Lots of other table structures above this in the DOM....
<table>  <---- this is the table I want to show or hide based on the users selection
  <tbody>
    <tr>
     <td>
       <table>
         <tbody>
           <tr>
             <td class="PANEREPEAT">  <---- this is the node I can get selector to
                 Valuation information
////

所以我做了下面的客户端javascript:

    var val_information_screen;

    $('.PANEREPEAT').filter(function () {
        //Find the valuation information screen
        return $(this).text() == 'Valuation information';
    }).each(function () { //iterate through all of these (there should only be one!)
        val_information_screen = $(this);
    });

    var sel_ofee_type = $('#ofee_type');
    if (sel_ofee_type.val() == '006') {
        val_information_screen.closest('table').parents("table:first").show();
    } else {
        val_information_screen.closest('table').parents("table:first").hide();
    }

它确实有效,只是不是特别漂亮。我真正讨厌的一点在下面。有没有更好的方法来使用 jQuery 遍历 DOM?

val_information_screen.closest('table').parents("table:first").show();
val_information_screen.closest('table').parents("table:first").hide();
4

2 回答 2

6

如果你确定它有固定的结构,那么你可以使用这个,

$(td-selector).parents("table").eq(1).hide();

在你的情况下,

val_information_screen.parents("table").eq(1).hide();
于 2013-08-06T16:33:26.807 回答
0

如果您的 DOM(特别是从您想要隐藏的表开始,直到您拥有作为选择器的 td)几乎是固定的,那么可以使用下面的选择器。

$('#element').parents('table').eq(1)
于 2013-08-06T16:59:47.113 回答