我正在使用jQuery(AJAX)加载数据,然后将其加载到表中(因此这会在页面加载后发生)。
在每个表行中都有一个“选择”链接,允许用户从表中选择一行。然后,我需要获取此行中的信息并将其放入页面下方的表单中。
$('#selection_table').on('click', '.select_link', function() {
$('#booking_address').text = $(this).closest('.address').text();
$('#booking_rate').text = $(this).closest('.rate').val();
});
根据我的理解,'最近'的函数遍历DOM树,因此我的链接在每行的最后一个单元格中,它应该从前一行获取元素'address'和'rate(类是分配到正确的单元格。)
我尝试使用快速而肮脏的'警告($(this).closest(等等......)在许多变体中调试自己,但似乎没有任何效果。
我是否需要采取不同的措施来定位原始页面加载后加载的数据?我哪里错了?
答案 0 :(得分:2)
您对.closest()
以及.text()
如何运作做出了错误的假设。如果有疑问,请养成研究文档的习惯,它给出了如何使用jQuery功能的清晰描述和示例。
.closest()
将遍历给定元素的父级,尝试匹配您提供的选择器。如果您的.select_link
不在“.address
内”,则您的代码将无效。
此外,.text()
是一个方法,而不是一个属性(以语义方式,因为方法实际上是Javascript中的属性)。 x.text = 1;
只是覆盖此元素上的方法,这不是一个好主意,您想要调用方法:x.text(1);
。
这些方面的某些内容可能有效:
var t = $(this).closest('tr').find('.address').text();
$('#booking_address').text(t);
如果#booking_address
是表单元素,请在其上使用.val()
。
如果它不起作用,请提供您正在使用的HTML结构(编辑您的问题,使用jsFiddle或类似的服务),我会帮助您。在提出这样的问题时,无论如何都要提供相关的HTML结构。
答案 1 :(得分:0)
您可以尝试使用parent()和find()函数并直接找到数据,parent()和find()方法的数量取决于您的HTML。
实施例。获取以前的行数据
$('#selection_table').on('click', '.select_link', function(){
$('#booking_address').text = $(this).parent().parent().prev().find('.address').text();
});
其中parent表示父元素(tr),则prev()作为上一行,find查找元素。
答案 2 :(得分:-1)
在某处有代码演示吗?检查您何时调用代码。它应该是在AJAX调用'成功'之后。