jQuery 需要帮助在具有特定类的 div 元素中选择 tr 元素

Posted

技术标签:

【中文标题】jQuery 需要帮助在具有特定类的 div 元素中选择 tr 元素【英文标题】:jQuery need help selecting tr elements inside a div element with a specific class 【发布时间】:2016-06-24 10:59:30 【问题描述】:

我正在尝试使用 Kendo UI Grid 控件构建自定义悬停事件。使用锁定列时,我无法在鼠标悬停时突出显示整行。我找不到一个简单的例子来效仿。

目前悬停时的选择如下所示:

我编写了以下函数来尝试突出显示整行(锁定和解锁部分),但我似乎无法获得正确的 jQuery 选择器:

$("#ddhintgrid div.k-grid-content table tbody tr").hover(function () 
        //stuff to do on mouse enter
        var grid = $("#ddhintgrid").data("kendoGrid");
        var rowUid = grid.dataItem(this).uid;

            // select the row currently being edited
        $('[data-uid=' +rowUid + ']').addClass('k-state-hover');
    ,
    function () 
        //stuff to do on mouse leave
        $("#ddhintgrid .k-state-hover").removeClass("k-state-hover");
    );

这个方法的内容不重要。我只是希望它在用户将鼠标移到网格未锁定部分中的一行上时触发。

我希望 .hover() 函数触发的元素是 <div class="k-grid-content> 元素下的 tr 元素。见这里:

【问题讨论】:

【参考方案1】:

我通过修改此处找到的解决方案找到了答案:Add jQuery hover effect across two tables。

我将以下代码添加到我的网格的 dataSource 的 dataBound 函数中:

var $trs = $('table.k-selectable tbody tr');
$trs.hover(
    function () 
        var i = $(this).index() +1;
        $trs.filter(':nth-child(' +i + ')').addClass('k-state-hover');
    ,
    function () 
        var i = $(this).index() +1;
        $trs.filter(':nth-child(' +i + ')').removeClass('k-state-hover');
    
);

希望这可以帮助其他遇到此问题的人。还没有发现任何问题。

【讨论】:

将函数放在 dataBound 参数中对我来说是固定的。 dataBound: function() $('.hover').hover(function(e) hover($(this),e););【参考方案2】:

试试

$("#ddhintgrid > .k-grid-content > table > tbody > tr:not(:first, :last)").hover(function () ...);

您需要排除第一个和最后一个(页眉和页脚)tr。

此外,您需要遍历对面的表以找到关联的行,以便将 CSS 设置为“k-state-hover”/

示例: 我将鼠标悬停在锁定表中的 row1 上,现在该函数应该为锁定表 row1 设置 css,并在“k-grid-content”表中找到 row1,并为该行设置 css。这两行将具有不同的 UID,因此您不能依赖它进行比较,请尝试第 n 个孩子,或者如果您有行数据的唯一键,那么您可以使用它来比较它们。

【讨论】:

【参考方案3】:

为了正确地对排序等产生影响,这必须在网格上的dataBound 事件中完成,或者应该能够在客户端完成。我没有测试这些,但它应该可以工作。

客户端绑定

你需要添加一个函数来使用切换类:

addHoverStyleToGridRow = function () 
    $("table.k-focusable tbody tr").hover(function() 
            $(this).toggleClass("k-state-hover");
        
    );
;

然后在数据绑定中:

// this is where the hover effect function is bound to grid
$("#ddhintgrid").kendoGrid( dataBound: addHoverStyleToGridRow );

服务器绑定

如果您使用的是服务器绑定网格,那么:

$(document).ready(function() 
     $("#ddhintgrid").find("table.k-focusable tbody tr").hover(function() 
            $(this).toggleClass("k-state-hover");
        
    );
);

【讨论】:

抱歉,这对我不起作用。我的 dataBound 函数中有其他内容,但我在其顶部添加了对 addHoverStyleToGridRow() 的调用。

以上是关于jQuery 需要帮助在具有特定类的 div 元素中选择 tr 元素的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS:处理单击具有特定类的 div

使用jQuery选择具有特定数据属性的元素

使用 jQuery 获取不是具有特定 CSS 类的容器的子元素的元素的后代

如何使用jQuery在某些特定div中选择具有相同名称的所有元素[重复]

如何查找 jQuery 中是不是存在具有特定 id 的 div?

jQuery hide()所有具有特定类的元素,除了具有特定父元素的所有元素