【发布时间】:2018-10-26 19:56:33
【问题描述】:
此代码的目的是如果<tr> 中包含的<td> 位于被单击的<tr> 下方,则进行ajax 调用,但前提是隐藏的<tr> 为空。最终,我计划获取这些数据并对其进行处理,但现在,我只需要让这个模拟手风琴作为桌子工作的东西。由于这个表是在我有其他 .hidden 元素的同一个 html 文件上制作的,我必须创建自定义类来隐藏这些特定的类。 detail-view 类使其可见,hidden-detail 类包含 display:none。我知道 postDetails 可以找到正确的数据。我更担心的是找出为什么FireFox的开发工具说statusRow和detPane在整个代码中被标记为(unavailable),而statusRow.closest('tr').next('tr')实际上似乎包含detPane行,正如预期的那样。 jQuery 或选择器有问题吗?这是怎么回事?
function makeOrderTable(response, username, sesstoken) {
$(jQuery.parseJSON(JSON.stringify(response))).each(function() {
var foNum = this['Factory Order#'];
var pO = this['PO#'];
var status = this['Status'];
var shipDate = this['Ship Date'];
$('.orders tbody').append(
'<tr class="status-row">'+
'<td>' + foNum + '</td><td>' + pO + '</td><td>' + status + '</td><td>' + shipDate + '</td>'+
'</tr>'+
'<tr class="detail-row hidden-detail">'+
'<td colspan="4"></td>'+
'</tr>'
);
});
$(document).ready(function() {
$('table').on('click', 'tr.status-row', function() {
var statusRow = $(this);
var detPane = $(statusRow[0]).closest('tr').next('tr');
$('.detail-view').addClass('hidden-detail');
$('.detail-view').removeClass('detail-view');
detPane.addClass('detail-view');
detPane.removeClass('hidden-detail');
if (detPane.find('td').text == '')
{
var value = statusRow.find('td:first-child').text();
postDetails(value, username, sesstoken, detPane.find('td'));
}
});
});
}
【问题讨论】:
-
旁注:
jQuery.parseJSON(JSON.stringify(response))是说取对象,将其转换为 json,然后将其转换回对象。你为什么这样做? -
另外,如果您给
$()的值不是选择器或(数组)dom 元素,您应该使用$.each(array|object, function)版本而不是$(selector|element|array of elements, function).each()版本。参考。 api.jquery.com/jQuery.each -
-
detPane.find('td').text是错误的,text()是一个方法,而不是一个属性 -
@Taplar idk,它就是这样工作的。它得到了东西,如果我将我的 ajax 调用移动到循环内,而不是点击,它一切都很好。但我需要点击那里。
标签: javascript jquery html onclick append