这是我在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。请帮忙。
答案 0 :(得分:1)
id
属性应该是唯一的。你有重复的地方,如果你使用$("#status")
只选择第一个。你应该使用类。也就是说,改变这个:
<label id="status">RUNNING </label>
......对此:
<label class="status">RUNNING </label>
至于更新与相应文本值在同一行中的状态,您可以使用DOM导航方法保持在同一行内。我会使用.closest()
来查找父tr元素,然后使用.find()
返回到该行的状态。
请注意,在.each()
中,您可以使用this
引用当前元素。所以在上下文中所有这些:
$("#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;
请注意,您还可以为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)")
}
}
}