2013-08-24 53 views
6

這我工作的代碼如下:獲得第n個TD的所有TR具有特定類的文本

<table> 
<tr class="warning"> 
    <td> 1 </td> 
    <td> name </td> 
    <td> address </td> 
    <td> phone no </td> 
    <td> Location </td> 
</tr> 
<tr> 
    <td> 3 </td> 
    <td> name2 </td> 
    <td> address2 </td> 
    <td> phone no2 </td> 
    <td> Location2 </td> 
</tr> 
<tr class="warning"> 
    <td> 6 </td> 
    <td> name5 </td> 
    <td> address5 </td> 
    <td> phone no5 </td> 
    <td> Location5 </td> 
</tr> 
<tr> 
    <td> 7 </td> 
    <td> name6 </td> 
    <td> address6 </td> 
    <td> phone no6 </td> 
    <td> Location6 </td> 
</tr> 

我喜歡讓所有的第二TD的文本與所有TR帶班級警告。

我一直在使用_.each方法試過,但沒有成功的

+0

好問題+10。 –

回答

15

試試這個

$('tr.warning').each(function(){ 
    alert($(this).find('td').eq(1).text()); 
    }); 

演示Here

+0

+10。驚人。節省我的時間 –

10

嘗試

$('tr.warning td:eq(1)').text(); 

,如果你想更具體的答案不是使用:nth-child選擇

$('tr.warning td:nth-child(2)').text() 

http://jsfiddle.net/dbuZG/5/

+0

我沒有給出完整的代碼,只是給你的想法...現在根據Alnitak給出的答案,你可以映射並得到你需要的結果。 –

+0

':eq(1)'語法實際上並不工作,AFAICS - 它只返回一個元素。 – Alnitak

+0

@Alnitak好吧,我已經測試並提供了工作解決方案,而不使用'.map()'和'.get()' –

1

這將獲得數組中名稱的列表:

var names = $('tr.warning td:nth-child(2)').map(function() { 
    return $(this).text(); 
}).get(); 

演示在http://jsfiddle.net/alnitak/CjQAh/

(使用:eq(1)不起作用,因爲:eq適用於指數整套返回的元素,該元素的相對不位置,其<tr>容器,和的內所以只返回一個元素)。

3

使用jQuery的:nth-child選擇器以及.each()應該適合您。

小提琴:http://jsfiddle.net/chucknelson/KDy8X/

jQuery的

$(function() { 
    //use the :nth-child selector to get second element 
    //iterate with .each() 
    $('table tr.warning td:nth-child(2)').each(function(index, element) { 
     var name = $(element).html(); 
     $('#name-list').append('<li>' + name + '</li>'); 
    }); 
}); 

一些額外的HTML:

<div id="warning-names"> 
    Warning Names: 
    <ul id="name-list"> 
    </ul> 
</div> 
+0

其中'td'和'tr'定義爲'tr.warning td:n-child(2)'.. ???在你的代碼片段中。 –

+0

我複製了你的HTML,它在小提琴中,不想在答案中粘貼那麼大的代碼塊。 – chucknelson

相關問題