jQuery .hasClass,.closest()和$(this)

时间:2013-07-09 14:33:31

标签: jquery

我正在尝试突出显示表格的父tr,如果孩子td > p有某个类。我有以下内容:

$(document).ready(function(){
    var $target = $('.flag-wrapper p').closest("tr");
    var $element = $('.flag-wrapper p').hasClass("selector-on");

    if ( $element ) {
        $target.addClass("marked-row");
    } else {
        // whatsoever
    }
});

http://jsfiddle.net/cZJca/1/

现在我的问题是我不能只针对当前的 tr 。我尝试过使用$(this),但据我所知,它在if语句中不起作用。

如何了解我应该如何处理这一点将非常感激。另外,我想使用.click()事件会更容易,但是我必须在页面加载时检查这个.hasClass()而不是用户操作。

5 个答案:

答案 0 :(得分:5)

只需使用:

 $('.flag-wrapper p.selector-on').closest('tr').addClass("marked-row");

这会查找p内具有类.flag-wrapper的所有.selector-on个元素。然后,它会获得每个匹配项中最接近的tr,并添加.marked-row类。

这里有效:http://jsfiddle.net/cZJca/6/

答案 1 :(得分:1)

循环遍历每一个并单独处理。

$('.flag-wrapper p').each(function(){
    var $this = $(this);
    var $target = $this.closest("tr");

    if($this.hasClass("selector-on")){
        $target.addClass("marked-row");
    } else {
        // whatsoever
    }
});

答案 2 :(得分:0)

你只需要做

$('tr:has(.flag-wrapper p.selector-on)').addClass('marked-row');

FIDDLE

$('tr').has('.flag-wrapper p.selector-on').addClass('marked-row');

FIDDLE

答案 3 :(得分:0)

你可以在段落上loop单独定位它们:

$(document).ready(function(){
    $('.flag-wrapper p').each(function() {
        var $curElement = $(this);
        if ($curElement).hasClass("selector-on")) {
            $curElement.closest("tr").addClass("marked-row");
        } else {
           // whatsoever
        }
    });
});

答案 4 :(得分:0)

$('.flag-wrapper p.selector-on').closest('tr').addClass('marked-row');