无法连续获得第一个td的值

时间:2017-11-06 07:23:00

标签: jquery dom

这是html表单,我希望获得表格的第一个value标记td

<tr class="tr_entry">
    <td><input readonly="" name="product_id[]" id="product_id" value="xyz-20" type="text"></td>
    <td>
    <select id="purpose_id" name="purpose_id[]">
                        <option value="100"> abc</option>
                                <option value="115">   abc</option>
                                <option value="116"> abc</option>
                                <option value="98"> abc</option>
                        </select>
    </td>
    <td><input id="recive_date" readonly="" name="recive_date[]" class="dp"></td>
    <td>
        <select id="funding_source_id" name="funding_source_id[]">
                                <option value="1">abc</option>
                                <option value="2">abc</option>
                            </select>
    </td>
    <td><button id="open_modal" type="button" class=" btn btn-primary add_button" data-toggle="modal" data-target="#myModal"><i class="fa fa-plus-square" aria-hidden="true"></i> </button></td>
</tr>

我试过这个但是它在undefined中给了我alert

$(document).on('click','#open_modal',function(){
    var vacc = $(this).find('td:first').val();
    alert(vacc);
});

以及

var vacc = $(this).parent().siblings(":first").text();
alert(vacc);

2 个答案:

答案 0 :(得分:1)

您应该使用:

$(document).on('click','#open_modal',function(){
    var vacc = $(this).closest('tr').find('td:first-child input').val();
    alert(vacc);
});

.find仅在当前元素的后代中搜索给定的选择器。

相反,.closest('tr')会选择当前行,然后您可以搜索相关的td元素。

此外,您应该使用input或更具体的内容选择.find('td:first-child input')元素。但是使用.find('td:first-child')进行选择只会选择<td>元素 - 它没有值属性。

答案 1 :(得分:0)

你有很多误解,

第一

td元素没有您可以val()

访问的html()功能

第二

var vacc = $(this).find('td:first-child input').val();
上面代码中的

this引用了行的按钮,因此你可以访问tr行,

您可以使用以下两个不同的代码最近,但我的建议是closest

var vacc = $(this).closest('tr').find('td:first').html();

您可以将td元素文字作为字符串访问,它会显示您的input html代码<input readonly="" name="product_id[]" id="product_id" value="xyz-20" type="text">

如果要访问输入值,则应使用

var vacc = $(this).closest('tr').find('td:first').find('input').val();