2013-07-09 80 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

那麼你的答案的用途在哪裏呢?它對原始問題沒有任何貢獻。 –