2016-06-07 24 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

相关问题