循环遍历表并在jQuery中更改值

时间:2017-03-13 04:39:12

标签: jquery

这是我在jsp中的表结构

<table id="servicetable">
<tr>
<td colspan="2"><label id="servicename">somelabel</label></td>
<td><label id="status">RUNNING </label></td>
</tr>
<tr>
<td colspan="2"><label id="servicename2">somelabel</label></td>
<td><label id="status">RUNNING </label></td>
</tr>
<tr>
<td colspan="2"><label id="servicename3">somelabel</label></td>
<td><label id="status">RUNNING </label></td>
</tr>
</table>

现在我必须将“RUNNING”的值更改为“STOPPED”,如果我的“servicename”的值首先与另一个字符串匹配。以下是代码

     var $all_td_in_a_table = $("#servicetable td:nth-child(1)");//to get all first td's

                  $all_td_in_a_table.each(function(){                  
                       labelText_servicename = $("#servicename").text();
                       labelText_servicename=$.trim(labelText_servicename);
                       if(labelText_servicename.toLowerCase() ==="ABC"){
                       labelText = $("#status").text();
                       $("#status").text("TEST");
                       }
});

我看到变量“all_td_in_a_table”包含所有第一个td的列表,但我的.each循环总是给我第一个td。请帮忙。

2 个答案:

答案 0 :(得分:1)

id属性应该是唯一的。你有重复的地方,如果你使用$("#status")只选择第一个。你应该使用类。也就是说,改变这个:

<label id="status">RUNNING </label>

......对此:

<label class="status">RUNNING </label>

至于更新与相应文本值在同一行中的状态,您可以使用DOM导航方法保持在同一行内。我会使用.closest()来查找父tr元素,然后使用.find()返回到该行的状态。

请注意,在.each()中,您可以使用this引用当前元素。所以在上下文中所有这些:

&#13;
&#13;
$("#servicetable td:nth-child(1)").each(function() {
  var currentItem = $(this);
  if (currentItem.text().toUpperCase() === "ABC") {
    currentItem.closest("tr").find(".status").text("STOPPED");
  }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table id="servicetable">
  <tr>
    <td colspan="2"><label id="servicename">somelabel</label></td>
    <td><label class="status">RUNNING </label></td>
  </tr>
  <tr>
    <td colspan="2"><label id="servicename2">ABC</label></td>
    <td><label class="status">RUNNING </label></td>
  </tr>
  <tr>
    <td colspan="2"><label id="servicename3">somelabel</label></td>
    <td><label class="status">RUNNING </label></td>
  </tr>
  <tr>
    <td colspan="2"><label id="servicename2">ABC</label></td>
    <td><label class="status">RUNNING </label></td>
  </tr>
</table>
&#13;
&#13;
&#13;

请注意,您还可以为servicenameX字段指定一个公共类,然后选择该字段而不是#servicetable td:nth-child(1)

$("#servicetable .servicename").each(function() {
  // function body as above

...因为如果您重新构建表格以将该值放在不同的列中,则您不必更改选择器。您在上面的工作代码中会注意到我实际上根本没有使用servicenameX id值。

除了上面已经提到的工作解决方案之外,您的代码无法正常工作,因为在每个循环中您只测试过第一行$("#servicename")的值,加上您使用的是.toLowerCase(),然后与"ABC"进行比较。

答案 1 :(得分:0)

你快到了。您只需要将.toLowerCase()更改为.toUpperCase(),并使用索引元素参数:

let json = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as! String
if let data = json.data(using: String.Encoding.utf8) {
    let json = JSON(data: data)
    if let route = json["routes"].first {
        if let leg = route["legs"].first {
            print("--->\(leg["distance"]["text"].string)")
        }
    }
}

https://jsfiddle.net/cj0xLc4s/4/