如何选择与行跨度对应的行?

2024-01-20

我有一个动态生成的表,我试图更改其中某些行的背景颜色。有时有些行具有行跨度,我无法弄清楚如何获取与一个“行”相对应的所有行。我用谷歌搜索了我的大脑,发现这个 jsfiddle 非常接近我需要的(在逻辑意义上)

http://jsfiddle.net/DamianS1987/G2trb/ http://jsfiddle.net/DamianS1987/G2trb/

基本上我有这样的东西:

我希望能够一次突出显示整行,如下所示:

但我可以在 rowspan 行上实现的唯一突出显示是:

这是我的代码(与 jsfiddle 不同,但逻辑基本相同)

CSS:

.highlightedClass{
background-color: #AEAF93;
}

HTML:

<table border="1" class="altTable">
<th>ID</th>
<th>NAME</th>
<th>Miles</th>
<th>WORK</th>
<tbody>
    <tr>
        <td class="td_id">999B</td>
        <td class="td_name ">John</td>
        <td class="td_cumMiles">702.4</td>
        <td class="td_workEvent">Y</td>
    </tr><tr>
    <td class="td_id" rowspan="2">111A</td>
    <td class="td_name">Tom</td>
    <td class="td_cumMiles">446.5</td>
    <td class="td_workEvent">Y</td>
    </tr><tr>
    <td class="td_name">Becky</td>
    <td class="td_cumMiles">446.5</td>
    <td class="td_workEvent">A</td>
    </tr>
</tbody>

JavaScript:

for(var j=0; j < inspection.length; j++){
var $tr = $('<tr></tr>');
var $td_id = $('<td></td>').addClass('td_id').html(inspection.id);
$tr.append($td_id);
$table.append($tr);

$.each(inspection[i], function(index, value){
var $td_name, $td_miles,$td_workEvent;
if(index > 0){
    var $2nd_tr = $('<tr></tr>');

    $td_name = $('<td></td>').addClass('td_name').html(value.stationSt);
    $td_miles = $('<td></td>').addClass('td_miles').html(value.miles);
    $td_workEvent = $('<td></td>').addClass('td_workEvent').html(value.code);
    $2nd_tr.append($td_name);
    $2nd_tr.append($td_miles);
    $2nd_tr.append($td_workEvent);
    $table.append($2nd_tr);
    $td_id.attr('rowSpan',index+1);

    if($td_id.text() === content().id){
            $2nd_tr.addClass("highlightedClass");   
    }else{
        if($2nd_tr.hasClass("highlightedClass")){                    
            $2nd_tr.removeClass('highlightedClass');
        }
    }
    $('#workevent').on('click', function(){
            $tr.removeClass('highlightedClass');
    });
}else{
    $td_name = $('<td></td>').addClass('td_name').html(value.stationSt);
    $td_miles = $('<td></td>').addClass('td_miles').html(value.miles);
    $td_workEvent = $('<td></td>').addClass('td_workEvent').html(value.code);
    $tr.append($td_name);
    $tr.append($td_miles);
    $tr.append($td_workEvent);
    $table.append($tr); 

    if($td_id.text() === content().id){
        $tr.addClass("highlightedClass");
    }else{                              
        if($tr.hasClass("highlightedClass")){
            $tr.removeClass('highlightedClass');
        }
    }           
    $('#workevent').on('click', function(){
        $tr.removeClass('highlightedClass');            
    });  
}   
});

你需要寻找任何rowspan=选定的属性tds,如果存在,也选择后续行。此示例应支持任何行跨度值(它根据行跨度计数附加后续行):

最终版本:JSFiddle:http://jsfiddle.net/TrueBlueAussie/G2trb/22/ http://jsfiddle.net/TrueBlueAussie/G2trb/22/

$('td').bind('click', function () {
    var $row = $(this).closest('tr');

    // What row index is the clicked row?
    var row = $row.index(); // Subtract heading row

    // Does the clicked row overlap anything following?
    var rowspan = ~~$row.find('td[rowspan]').attr('rowspan') || 0;

    // Get all rows except the heading, up to the last overlapped row
    var $rows = $row.parent().children().slice(1, row + rowspan);
    row--; // Subtract the heading row we excluded

    // Now see if any preceding rows overlap the clicked row
    $rows.each(function (i) {
        var $tr = $(this);

        // Only check first rowspan of a row
        var rowspan = ~~$tr.find('td[rowspan]').attr('rowspan') || 0;

        // If the rowspan is before the clicked row but overlaps it
        // Or it is a row we included after the selection
        if ((i < row && ((rowspan + i) > row)) || i > row) {
            $row = $row.add($tr);
        }
    });
    $row.toggleClass('green');
});

第一次尝试 JSFiddle:http://jsfiddle.net/TrueBlueAussie/G2trb/18/ http://jsfiddle.net/TrueBlueAussie/G2trb/18/

$('td').bind('click', function () {
    var $td = $(this);
    var $row = $td.closest('tr');
    var $tds = $row.find('td');
    $tds.each(function(){
        var rowspan = ~~$(this).attr('rowspan');
        while (--rowspan > 0){
            $row = $row.add($row.next());
        }
    });
    $row.toggleClass('green');
});

它需要针对位于前一个行跨度下的子行进行调整,但我也在努力解决这个问题。

Notes:

  • ~~是将字符串转换为整数的快捷方式。
  • the || 0将未定义的值转换为 0。
  • $row = $row.add($tr)正在将行元素附加到 jQuery 集合/对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何选择与行跨度对应的行? 的相关文章

随机推荐

  • 在 C# 中找出确切的文件类型[重复]

    这个问题在这里已经有答案了 如您所知 文件具有扩展名和 MIME 类型 但这两个属性不够智能 无法确定文件的确切类型 例如我有一个 exe文件 我将其重命名为扩展名二 png 因此 如果我尝试以编程方式找出它的类型或 mime 类型 结果将
  • 缩短 Zsh 中的提示

    我在让 zsh 缩短提示符时遇到了很多麻烦 我目前正在使用带有 agnoster 主题和 oh my zsh 包管理器的 zsh 目前 我的提示在工作期间变得非常长 通常约为 110 个字符 占据了我的终端的整个长度 这在美观上不太令人愉悦
  • Slick:有没有办法用正则表达式创建 WHERE 子句?

    我寻找一个相当于 select from users where last name w son 例如 当数据库中有以下名称时 first name last name Tore Isakson John Smith Solveig Lar
  • 在 C API 中使用可变参数来设置键值对是个好主意吗?

    我正在编写一个 API 它可以更新结构中的许多不同字段 我可以通过使更新函数可变参数来帮助添加未来的字段 update FIELD NAME1 10 FIELD NAME2 20 然后稍后添加FIELD NAME3无需更改任何现有调用 up
  • 我必须在标头中包含respond.js 吗?

    使用 Bootstrap3 构建一个网站 我希望它可以在 IE 上运行 当我在页面底部包含 respond js 时 它似乎有效 但我想在使用它之前确保这实际上是正确的 我的问题很简单 我在哪里包含 JS 文件 特别是 respond js
  • 如何使用 XSLT 输出重复元素?

    我有 xml 看起来像这样
  • getApplicationContext() 和 getActivity() 之间的区别

    getApplicationContext 和 getActivity 之间有什么区别this在安卓中 之间有很多区别 View getContext http developer android com reference android
  • 具有 JDBC 和 JNDI REALM 身份验证的旧应用程序

    我的应用程序当前依赖于 JDBC 领域身份验证 最近的需求迫使我们也考虑使用 LDAP 身份验证 我们正在考虑使用 Active Directory 进行身份验证和授权 角色 作为独立测试 我能够使用 AD 验证我的应用程序 但这是我未来的
  • 使用 system() 命令运行多个 R 脚本

    我在 Windows 7 中运行 RStudio 我编写了一个主脚本 该脚本生成 57 个新的 R 脚本 每个脚本都包含根据两个参数运行函数的命令 vector1 lt c 1 19 vector2 lt c 1 3 首先 主脚本使用两个
  • Javascript:更改二维数组中的单元格值

    所以 我有一个二维数组 我这样声明 var grille new Array 60 fill new Array 30 fill false 我希望能够更改数组中一个单元格的值 但是当我这样做时 grille x y new value 我
  • UILabel 子类使用自定义颜色初始化

    我的目标是设定textColor我的习惯UILabel我的视图控制器中的子类 我有一个UILabel子类名为CircleLabel 以下是它的基础知识 class CircleLabel UILabel required init code
  • 由于缺少文件,Visual Studio 2010 构建时出错

    我到处搜索 似乎找不到任何有同样问题的人 尽管我确信人们过去也犯过同样的错误 我不小心删除了调试和发布文件夹的内容 现在我收到文件未找到错误 作为背景 它是 C 中的 Windows 窗体应用程序 我正在运行 Visual Studio 1
  • WPF 在代码后面添加不带键的样式资源

    我正在从 WPF 应用程序的后台代码生成一个 xaml 并希望将样式添加到生成的 xaml 我使用资源字典来存储我的应用程序将访问的样式信息 并根据资源字典中的键将其应用于生成的 xaml 中的相应元素 现在我想将特定样式应用于生成的 xa
  • 运行 AWS CLI 命令时出现“configparser.DuplicateOptionError”

    在mac终端中执行以下命令时出现错误 aws configure 我在网上找不到任何有用的东西 而且我是 mac 和 aws 的新手 有人可以帮我解决吗 其他命令也会发生同样的事情 例如aws version命令如which aws会正常工
  • 房间迁移更改表不添加新列并一次又一次地调用迁移

    所以基本上我正在使用空间并尝试添加从数据库版本 1 到 2 的迁移 但我的 alter 命令不起作用 我当前的实现如下 void init db Room databaseBuilder Global getInstance AppData
  • javascript 语法:函数调用和使用括号

    为什么这有效 但不是这个
  • 将 int 转换为 char 而不使用 ASCII [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我如何将小于 10 的 int 转换为 char 例如 5 gt 5 不使用 ASCII 表将 int 转换为 char 由于数字在标准字符
  • php exec 输出被修剪

    我在 php 中使用 exec 又遇到了另一个麻烦我的操作系统是 suse linux 我使用的是 php 5 1 2 不知何故 当我使用 exec 时 我的输出被修剪 in linux gt ps ef grep java root 35
  • Azure AD - 始终需要范围,因此需要一个默认范围

    我已经为一家企业实施了 Azure AD 好吧 还没有完全完成 目的是只有企业中的人员可以使用它 他们必须位于企业的 Active Directory 中 并且存在仅分配给某些用户的特殊目标角色 范围 REST 端点用这些范围进行注释 在
  • 如何选择与行跨度对应的行?

    我有一个动态生成的表 我试图更改其中某些行的背景颜色 有时有些行具有行跨度 我无法弄清楚如何获取与一个 行 相对应的所有行 我用谷歌搜索了我的大脑 发现这个 jsfiddle 非常接近我需要的 在逻辑意义上 http jsfiddle ne