jQuery选择器,用于查找包含具有特定值的TD INPUT的TR

Ed *_*ams 5 html javascript jquery jquery-selectors

好吧,这看起来应该是一个简单的问题,但答案是我的答案.我有一个从JSON数据构建的表单,我从中构建了一个包含INPUT文本控件的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>
Run Code Online (Sandbox Code Playgroud)

我尝试的选择器是:#MyTable tr:has('input[value="{year}"]')和几十种变化.

我用{year}我正在搜索的年份值替换字符串,所以最终看起来像:#MyTable tr:has('input[value="2014"]')

我相信它可能是由于最初通过代码设置值的事实,因为如果我使用#MyTable tr:has('input')它返回所有行.

由于可维护性,我不想硬编码路径,只是$(this).closest("tr")...在javascript代码中说.

知道如何检索包含具有特定值的输入的TR的引用吗?如果我的代码是正确的,在通过代码设置值时是否需要做一些不同的事情?

Jos*_*ier 4

仅当元素具有硬编码时,选择器$('#MyTable tr:has(input[value="2014"])')才会起作用inputvalue仅当元素具有值为 的2014。请参阅此示例

如果您尝试选择input没有硬编码value属性的元素,那么您可以过滤这些元素并返回input值等于的元素2014。根据您的需要,您可以收听inputchange事件。

示例在这里

$('#MyTable input').on('input change', function () {
    $tr = $('#MyTable tr input:first').filter(function () {
        return this.value === '2014' || $(this).attr('value') === '2014';
    }).closest('tr');
});
Run Code Online (Sandbox Code Playgroud)