0

Im struggling on splitting an array into 3 separate td's.

$(runner).find(".third_level .jockey_stats").html(runners[i].jockey_stats);
$(runner).find(".third_level .trainer_stats").html(runners[i].trainer_stats);

jockey_stats & trainer_stats are both arrays which hold 3 pieces of information which render like this:

<td>248-28(11.3%)-35</td>

I would like it to display within the table like this

<td>248</td>
<td>28(11.3%)</td>
<td>35</td>

HTML

<table class="third_level" cellspacing="0" border="0">
<tbody>
    <tr>
        <th><%= I18n.t("views.wagering.third_level.career_earnings") %></th>
        <th><%= I18n.t("views.wagering.third_level.jockey_stats") %></th>
        <th><%= I18n.t("views.wagering.third_level.trainer_stats") %></th>
    </tr>
    <tr>
        <% if @third_level_runner %>
            <td class="earnings tl_data"><%= number_to_currency(@third_level_runner.total_earnings, :unit => "₪", :precision => 0, :delimiter => ",") %></td>
            <td class="jockey_stats tl_data"><%= @third_level_runner.jockey_stats %></td>
            <td class="trainer_stats tl_data"><%= @third_level_runner.trainer_stats %></td>
        <% else %>
            <td class="earnings tl_data">-</td>
            <td class="jockey_stats tl_data">-</td>
            <td class="trainer_stats tl_data">-</td>
        <% end %>
    </tr>
</tbody>

4

1 回答 1

0

好吧,我咬一口:

$(runner).find(".third_level .jockey_stats").html(runners[i].jockey_stats.replace(/-/g, , '</td><td>'));

这应该够了吧。
如果您不想使用正则表达式:

$(runner).find(".third_level .jockey_stats").html(runners[i].jockey_stats.split('-').join('</td><td>'));

正则表达式方法的工作原理如下:表达式匹配破折号 ( -),并将其替换为</td><td>,通过使用全局标志 ( g),表达式应用于字符串中的所有破折号。
有效地<td>248-28(11.3%)-35</td>变成<td>248</td><td>28(11.3%)-35</td><td>248</td><td>28(11.3%)</td><td>35</td>

在这种情况下,该join-split方法会导致更多开销,首先将字符串分解为字符串数组:

'<td>248-28(11.3%)-35</td>'.split('-');

变成:

['<td>248','28(11.3%)','35</td>']

join应用于哪个,</td><td>作为分隔符,产生

<td>248</td><td>28(11.3%)</td><td>35</td>

但是,如果标记可能包含破折号,您应该使用正则表达式方法,并稍微处理一下表达式。一个懒惰的解决方案可能是:

jockey_stats.replace(/\>[^<]*/g, function(inner)
{//inner matches substring starting from first > to first <
    return inner.replace(/-/g, '</td><td>');
});

这样,标签内包含破折号的属性将不会被处理。
表达式相当简单:
\>[^<]*匹配>和所有后续字符(如果有的话)不是 <,换句话说,是>和之间的所有字符<
然后将此匹配项传递给一个函数,该函数将所有破折号替换为</td><td>.

例如:

console.log('<td data-type="foo">248-28(11.3%)-35</td>'.replace(/\>[^<]*/g, function(inner)
{
    return inner.replace(/-/g, '</td><td>');
}));

日志"<td data-type="foo">248</td><td>28(11.3%)</td><td>35</td>"

于 2013-07-02T11:00:23.580 回答