0

我有这段代码,我需要对前 2 个对象做一些事情,然后对其余的做一些事情,但是如何做呢?我从<tr data-name='test' data-price='2' data-one='blabla' ...

data = $(this).data();
html_option = "<table id='Unit_Options_Table'>";
// Do some thing with the first 2 
$.each(data, function(option, cost) { // Then do something with the rest
  html_option += "<tr>" +
          "<td class='Unit_Options_Name_td'>" + option + "</td>" +
          "<td class='Unit_Options_Cost_td'>" + cost + "</td>" +
          "</tr>";
});

html_option += "</table>";
4

3 回答 3

2

您不能真正依赖属性的顺序。如果您可以更改标记,我建议您使用 JSON 作为您的值:

<tr data-name="test" data-price="2" data-items='["blabla",…]'>
var name = this.dataset.name;
var cost = this.dataset.price;
var items = JSON.parse(this.dataset.items);

var option = $("<table>", { id: "Unit_Options_Table" });

// I’m not even sure where the loop belongs here
option.append(
    $("<tr>").append(
        $("<td>", { class: "name", text: name }),
        $("<td>", { class: "cost", text: cost })
    )
);

如果不是这样,至少要选择比 , 等更好的名字one——two这样做会让你自己变得尽可能困难。

在您在评论中阐明的具体情况下,我会这样做:

<tr data-name="bla" data-cost="3" data-items='[{"name":"test","cost":20},…]'>
var data = $(this).data();
var items = $.parseJSON(data.items);

var option =
    $("<table>", { id: "Unit_Options_Table" })
        .append(
            $("<tr>").append(
                $("<th>", { text: data.name }),
                $("<th>", { text: data.cost })
            )
        )
        .append(
            $.map(items, function(item) {
                return $("<tr>").append(
                    $("<td>", { text: item.name }),
                    $("<td>", { text: item.cost })
                );
            })
        );
于 2013-11-14T23:54:09.197 回答
1

不要使用.each,你会发现它更容易。

doSomething(data[0], data[1]);
for (var i = 2; i < data.length; ++i) {
    doSomethingElse(data[i]);
}

强迫自己使用便利功能不是很方便......

于 2013-11-14T23:51:48.183 回答
0

不应该

option

如果您正在迭代数组,则成为索引?

所以它应该很简单

$.each(data, function(option, cost) { 
  if(option < 2){
     //do something with first two
  }else{
     html_option += "<tr>" +
          "<td class='Unit_Options_Name_td'>" + option + "</td>" +
          "<td class='Unit_Options_Cost_td'>" + cost + "</td>" +
          "</tr>";
 }
});
于 2013-11-15T00:01:50.860 回答