有时候我们需要根据某个元素值获取或改变其它元素值,也就是级联操作。
如果同个页面两者相关的元素都只有一个,那就比较容易处理,可以通过给每个元素设置唯一ID的方式在JS获取到元素对象,然后进行想要的修改,这种没什么好说的。但如果同个页面两者相关的元素都不止一个,比如现在有多行数据,每一行都有一个叫姓名和性别的两个元素。
// 要求填写姓名后自动给性别赋值
<div>
<div>
<label>姓名</label>
<label>性别</label>
</div>
<div>
<input name="n1" onKeyUp="getSex(this)" />
<input name="s1" />
</div>
<div>
<input name="n1" onKeyUp="getSex(this)" />
<input name="s1" />
</div>
</div>
// 思路分析
// 我们可以把姓名这个对象当成方法的参数,在写getSex这个方法的时候,根据传的参数,获取到参数对象的父级,根据这个父级对象就可以获取到同级下面的其它元素对象
function getSex(currentName) {
var currentDiv = currentName.parent(); // 有时候页面设计的时候可能会有多级div,可以通过多次调用parent()获取外层的div
var currentSex = currentDiv.find("input[name='s1']"); // 根据名称找到同级div下面的元素对象
...
}
如果页面是用表格设计,在同一个tr下面可以直接通过tr标签元素获取到父级对象,再获取到其他td对象
// 表格设计部分
<table>
<tbody>
<tr>
<td>姓名</td>
<td>性别</td>
</tr>
<tr>
<td><input name="n1" onKeyUp="getSex(this)" /></td>
<td><input name="s1" /></td>
</tr>
</tbody>
</table>
// JS部分
function getSex(currentName) {
var currentTr = $(currentName).parents("tr"); // 当前行对象
var currentSex = currentTr.find("input[name='revenue_rate']");
...
}