Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery选择器查找包含具有特定值的TD输入的TR_Javascript_Jquery_Html_Jquery Selectors - Fatal编程技术网

Javascript jQuery选择器查找包含具有特定值的TD输入的TR

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

好吧,这似乎应该是一个简单的问题,但我找不到答案。我有一个从JSON数据构建的表单,从中我构建了一个包含3行14列的表,每个表包含一个输入文本控件

当这些控件中的任何一个值发生更改时,我需要找到第一列中的输入控件等于特定年份的包含行

以下是标记的示例:

<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
} );