我想让我的JavaScript功能变得更动态,更灵活。
实际上,我有一个表,其中包含一组行,每行都有一组列。在那里,一些列可能包含id属性和锚标记,而其他列可能不包含。找到下面的样本表。
<table id="history-data">
<tr>
<td id="264"> <a class="add-icon"><img src="/includes/images/plusCircle.png"></a></td>
<td class="tdata">10/09/2014</td>
<td class="tdata">09:25 AM</td>
<td class="historyData"><a class="sess-invite-link">Invite</a></td>
</tr>
<tr>
<td id="264"> <a class="add-icon"><img src="/includes/images/plusCircle.png"></a></td>
<td class="tdata">10/09/2014</td>
<td class="tdata">09:25 AM</td>
<td class="historyData"><a class="sess-invite-link">Invite</a></td>
</tr>
</table>
现在我想遍历表行并获取特定的列属性。例如,对于第一列,我需要获取id,第二列获取其内部文本,而对于最后一列,我需要获取锚数据。
我生成了脚本以使其运行良好。但是我想让它变得动态,因为将来可能会添加两列,并且需要访问列中的子元素。
这是我的JavaScript函数:
// Get the table row objects
var tableRow = $('#history-data > tbody > tr');
// List out the properties that need to be accessed.
var arr = ["attr('id')","html()","html()","find('a').html()"];
// Loop through the rows and access the properties
for(var r = 0; r < tableRow.length; r++){
$(tableRow[r]).children().each(function(index) {
console.log(arr[index]);
console.log($(this).arr[index]); // fuzzy area
});
}
JQuery中是否有可能将字符串转换为可访问属性?
提前致谢。
答案 0 :(得分:5)
通常,将字符串转换为代码并不是一个好主意。为什么不使用一系列函数?
var funcs = [ function($elem) {
return $elem.attr('id')
},
function($elem) {
return $elem.html()
}
// ... etc.
];
tableRows.each(function() {
$(this).children().each(function(i) {
console.log( funcs[i]($(this)) );
});
});
答案 1 :(得分:0)
您可以使用eval("$(this)." + arr[index])
,但这不是很好的做法,您最好使用switch
答案 2 :(得分:0)
您可以使用jQuery直接选择列。即。
$('tr td:nth-child(1)').each(function(index, value){
console.log($(value).attr('id'));
});
输出
264
264
您现在可以对您喜欢的所有第一列执行任何操作,而无需迭代所有列。
因此,对于您提到的要求,您可以执行以下操作:
$('tr td:nth-child(1)').each(function(index, value){
console.log($(value).attr('id'));
});
$('tr td:nth-child(2)').each(function(index, value){
console.log($(value).text());
});
$('tr td:last-child a').each(function(index, value){
console.log($(value).attr('href'));
});