如何在Jquery中将字符串转换为可访问的属性以使功能动态化

时间:2014-10-09 11:14:46

标签: jquery arrays javascript

我想让我的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中是否有可能将字符串转换为可访问属性?

提前致谢。

3 个答案:

答案 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'));
});