2013-07-09 132 views
1

我试图强调一个表的父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

只需使用:

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

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

这是工作:

+1

:)我想我应该休息一下,我倾向于过于复杂的事情。谢谢你的回答,当然它是完美的。谢谢! – Adrian

+0

@AdrianApan - 没问题:) – Joe

+2

为什么不使用'最接近'?如果单元格嵌套在表格中,“父母”是错误的。 – Bergi

0

您需要做的仅仅

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

FIDDLE

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

FIDDLE

+0

你不知道'.flag-wrapper'是的'tr' – Bergi

+1

咦后裔?为什么不呢?它看起来像它在小提琴 –

+1

@Bergi也在OP'我试图强调一个表的父tr,如果一个孩子td> p有一个类' –

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 
    } 
}); 
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 
     } 
    }); 
}); 
0
$('.flag-wrapper p.selector-on').closest('tr').addClass('marked-row'); 
+1

你能否扩展你的答案,并解释一下这一行做了什么? –

+0

你可以在这个问题的最佳答案中阅读它:) –

+0

那么你的答案的用途在哪里呢?它对原始问题没有任何贡献。 –