Javascript jQuery选择器查找包含具有特定值的TD输入的TR
好吧,这似乎应该是一个简单的问题,但我找不到答案。我有一个从JSON数据构建的表单,从中我构建了一个包含3行14列的表,每个表包含一个输入文本控件 当这些控件中的任何一个值发生更改时,我需要找到第一列中的输入控件等于特定年份的包含行 以下是标记的示例:Javascript jQuery选择器查找包含具有特定值的TD输入的TR,javascript,jquery,html,jquery-selectors,Javascript,Jquery,Html,Jquery Selectors,好吧,这似乎应该是一个简单的问题,但我找不到答案。我有一个从JSON数据构建的表单,从中我构建了一个包含3行14列的表,每个表包含一个输入文本控件 当这些控件中的任何一个值发生更改时,我需要找到第一列中的输入控件等于特定年份的包含行 以下是标记的示例: <table id="MyTable"> <tr> <td><input type="text" /></td> <td><input type="te
<table id="MyTable">
<tr>
<td><input type="text" /></td>
<td><input type="text" class="changeHandled"/></td>
<td><input type="text" class="changeHandled" /></td>
</tr>
</table>
我尝试过的选择器是:#MyTable tr:has('input[value=“{year}]”)
和几十个变体
我将{year}
字符串替换为我正在搜索的年份值,因此它看起来像:#MyTable tr:has('input[value=“2014”]”)
我相信这可能是由于最初是通过代码设置值的,因为如果我使用#MyTable tr:has('input')
,它将返回所有行
由于可维护性,我不想硬编码路径,只想在javascript代码中说$(this).recest(“tr”)…
你知道如何检索包含特定值输入的TR引用吗?如果我的代码是正确的,那么在通过代码设置值时是否需要执行一些不同的操作?选择器$('#MyTable tr:has(input[value=“2014”])
仅在input
元素具有值为2014
的硬编码属性时才会工作。看
如果您试图选择一个没有硬编码值
属性的输入
元素,则可以对元素进行筛选,并返回值等于2014
的输入
元素。根据您的需要,您可以收听输入
或更改
事件
如果要使用plan JS解决方案,它可能会如下所示:
function getRowByYear(year) {
var table = document.getElementById('MyTable');
var row, rows = table.rows;
var input;
for (var i=0, iLen=rows.length; i<iLen; i++) {
input = rows[i].cells[0].getElementsByTagName('input')[0];
if (input.value == year) {
return rows[i];
}
}
}
函数getRowByYear(年){
var table=document.getElementById('MyTable');
变量行,行=table.rows;
var输入;
对于(var i=0,iLen=rows.length;i虽然我同意vanilla JS会更有效,但我认为过滤成本太高?我会监听更改事件并查找最近的行:
$( 'body' ).on( 'change', 'input[type="text"]', function(){
var theRow = $( this ).closest( 'tr' );
// Do what you need to with theRow
} );
是的,但这不会在点击事件中触发,就在文本输入被更改时。或者他甚至可能在模糊上触发。但我不会在一个输入发生更改时遍历每一个输入并检查其值——这很昂贵,而且在只想更改/检查更改输入的行时也没有必要。这个问题很久以前我甚至记不起来了我是如何修复的,但是重新阅读你的解决方案实际上会起作用,所以我将它标记为答案。
$( 'body' ).on( 'change', 'input[type="text"]', function(){
var theRow = $( this ).closest( 'tr' );
// Do what you need to with theRow
} );