2013-07-02 115 views
0

Im在将数组拆分为3个单独的td时挣扎不已。Javascript - 将数组拆分成单独的数组​​

$(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是持有3个的信息,其呈现这样两个阵列:

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

我想它这样

<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> 

+0

您是否尝试过?在短划线('-')上分裂似乎就是你在做什么 –

+0

我该怎么做? – user1428451

+0

发布了一个答案,这很容易,真的是 –

回答

0

OK,我会咬:

$(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>"