2016-06-07 40 views
0

我想知道如何選擇表中的特定td。

$.each(result.HotelSearchResult.HotelResults, function (index, item) { 
    var imgPath = item.HotelPicture; 
    var rate = item.StarRating; 
    var table = $('#tableId'); 
    var rows = '<tr><td rowspan="4" width="16.666%"><img src="' + imgPath + '" />'+ "</td>";            
    rows += '<tr><td class="code">' + addScore(rate, $("td.code")) + "</td></tr>";            
    table.append(rows); 
}); 

這裏,addScore是一個函數,它需要的元件作爲根據評價追加分其第二個參數。我正在關注this post,但在我的代碼中,它將每個迭代的所有評級附加到特定的td。這意味着如果有20個陣列,那麼它將在表中的每個td附加20個評級。我想爲td附加一個評分。

這是我的表:

<div id="divResult5"></div> 
<table> 
    <tr></tr> 
    <tbody id="tableId" style="border:solid 1px red;"></tbody> 
</table> 

請告訴我應該怎麼做。

+1

您可以使用完整的HTML,JS和CSS創建工作片段或小提琴。如果我們有這個,這將很容易。 – vijayP

+0

'$(「td.code」)'將返回所有具有類「代碼」的'​​'元素。這就是原因。 – sabith

+0

@vijayP只給我5分鐘,我會提供工作小提琴 – duke

回答

1

您可以如下修改addScore和嘗試:

function addScore(score) { 
var className = 'stars-container stars-'+score.toString(); 
return "<span class='"+className+"'>★★★★★</span>"; 
} 

,並調用addScore如下:

rows += '<tr><td class="code">' + addScore(rate) + '</td></tr>'; 

這是爲什麼原有功能不正常的原因: 的最初的功能是期望將DOM元素作爲第二個參數,並將分數跨度元素附加到DOM元素。

在你發送$(「td.code」)的情況下,有兩個相關的問題: 選擇器「td.code」將選擇所有類型爲「.code」的td元素,這意味着它的行爲如下:
=>當迭代第一行時,它不會找到任何td元素,因爲當前的td元素尚未在DOM中。
=>當它迭代第二行時,它不會找到當前td元素,但它會找到第一行的td元素,因爲第一行td元素也具有相同的類「.code」
=>迭代第n行時,它不會找到當前td第n個元素,但它會找到第(n-1)行的td個元素

因此,當前正試圖追加星號的td元素尚未在DOM中,你不能將其作爲第二個參數傳遞。

取而代之,您需要一個能夠生成HTML標記的函數(用星號表示),並且您可以直接調用該函數,addScore(score)將返回標記。

+0

沒有評分顯示,只顯示undefined @Dhananjaya Kuppu – duke

+0

@duke我修改了代碼來返回html,請現在嘗試 –

+0

,它工作正常thnx,但我不能理解這個函數plzz解釋我 – duke

相關問題