我有这个代码:
当我添加一个表时:http: //jsfiddle.net/VAkLn/7/ 这停止工作。为什么?
解决了:
我改变这个:price = self.next(".price"), To: price = $(".price"),
我有这个代码:
当我添加一个表时:http: //jsfiddle.net/VAkLn/7/ 这停止工作。为什么?
解决了:
我改变这个:price = self.next(".price"), To: price = $(".price"),
您的第一个示例有效的原因是tr
andtd
元素仅在元素中有效table
。浏览器有效地去除了 DOM 中的那些无效标签,从而为您留下类似于以下内容的结构:
<body>
<input type="input" size="3" class="qta">
<input type="input" size="7" class="price">
TOTALE: <input type="input" id="total" size="7" ;="">
</body>
在 Firebug 或 Webkit Inspector 中查看。
选择next()
器在这里起作用,因为input.price
它是匹配元素集中每个元素的紧随其后的兄弟。
一旦你包含了一个包装table
元素,tr
andtd
元素在结构中是有效的,并且会像你期望的那样被放置在 DOM 中:
<body>
<table width="520" border="0" align="center" cellpadding="3" cellspacing="0">
<tbody>
<tr>
<td width="40" bgcolor="#009966" class="whyte">
<input type="input" size="3" class="qta">
</td>
<td width="100" bgcolor="#009966" class="whyte">
<input type="input" size="7" class="price">
</td>
</tr>
</tbody>
</table>
TOTALE: <input type="input" id="total" size="7" ;="">
</body>
这会破坏next()
选择器,因为input.price
不再是匹配元素集中每个元素的紧随其后的兄弟。
解决方案是修改您的 jQuery 选择器input.price
以导航新结构:
price = self.parents('tr').find(".price"),
更新了你的小提琴。
.next() 选择器仅适用于当前元素中的兄弟姐妹。不知道为什么它在你的第一个例子中起作用......
我分叉了你的小提琴(http://jsfiddle.net/vansimke/n3W4F/)并添加了一些导航到父标签,移动到下一个标签,然后在里面找到“.price”元素。看看它是否符合您的要求。
下一个函数只查看直接兄弟。由于每个输入都包含在 td 标记中,因此它们没有直接的兄弟姐妹,因此
self.next(".price")
选择器不返回任何内容。你可以使用类似的东西
self.parents('tr').find(".price").
我不太确定为什么第一个片段有效。如果您检查 self 变量 (self.parents().foreach(...)) 的父级,则父级是 HTML -> BODY -> INPUT。我猜是因为 TR / TD 没有包含在 TABLE 元素中,所以输入标签变成了 BODY 的子元素?其他人可能对这种行为有更好的解释。