Kam*_*med 1 javascript jquery dom
我试图在JavaScript中动态创建一个对象.这是我写的JS代码:
var table = $("#eidtPersonalInfoTbl");
var trs = table.find('tr');
var obj = { };
$(trs).each(function(index, row){
var field = $(row).find('td').eq(0).html();
var value = $(row).find('td').eq(1).html();
eval('obj.' + field + ' = ' + value );
});
Run Code Online (Sandbox Code Playgroud)
这是表格的HTML标记:
<table class="table" border="1" id="eidtPersonalInfoTbl">
<tr>
<td class="span3 hidden-phone" > Name </td>
<td class="span5"> Name </td>
</tr>
<tr>
<td class="span3 hidden-phone"> Address</td>
<td class="span5"> Address </td>
</tr>
<tr>
<td class="span3 hidden-phone">Area</td>
<td class="span5"> Area</td>
<tr>
<tr>
<td class="span3 hidden-phone">Gender</td>
<td>Male</td> </tr>
<tr>
<td class="span3 hidden-phone" > Salutation </td>
<td class="span5"> Dr</td>
</tr>
<tr>
<td class="span3 hidden-phone">State</td>
<td class="span5"> State </td>
<tr>
<tr>
<td class="span3 hidden-phone">City</td>
<td class="span5"> City </td>
</tr>
<tr>
<td class="span3 hidden-phone" > Postel Code </td>
<td class="span5"> Postel Code </td>
</tr>
<tr>
<td class="span3 hidden-phone" > Phone# </td>
<td class="span5"> 04128741 </td>
</tr>
<tr>
<td class="span3 hidden-phone" > Mobile# </td>
<td class="span5"> 03218741525</td>
</tr>
<tr>
<td class="span3 hidden-phone" > Cover Letter </td>
<td>Cover letter goes here</td>
</tr>
<tr>
<td> <input type="submit" name="per-det" class="btn btn-success span5" value="Update and Cont."></td>
</tr>
Run Code Online (Sandbox Code Playgroud)
每当我尝试执行此操作时,它都会给我这个错误
未定义的变量名称
使用它更简单,更安全,更快捷:
obj[field] = value;
Run Code Online (Sandbox Code Playgroud)
......而不是eval('obj.' + field + ' = "' + value + '"'),显然有相同的目的.
你看到你现在看到的,因为value应该用引号括起来.例如,如果两个field和value等于'Name'(字符串),因为它现在站在evalled表达的样子......
obj.Name = Name
Run Code Online (Sandbox Code Playgroud)
...显然导致'Undefined variable Name'错误.
这里有两个旁注.首先,trs在这一行中再次包装jQuery对象是没有意义的......
$(trs).each(function(index, row)
Run Code Online (Sandbox Code Playgroud)
...因为它已经是一个jQuery对象(结果table.find('tr')).如果遵循一个简单的约定,则更容易看到这种冗余:用于存储jQuery对象的所有变量的前面名称$:
var $table = $("#eidtPersonalInfoTbl");
var $trs = $table.find('tr');
// ...
// $($trs) - obviously redundant
Run Code Online (Sandbox Code Playgroud)
其次,在这些行中两次浏览DOM有点浪费:
var field = $(row).find('td').eq(0).html();
var value = $(row).find('td').eq(1).html();
Run Code Online (Sandbox Code Playgroud)
我宁愿把它改写成这样:
var $tds = $(row).find('td');
var field = $tds.eq(0).html(); // or just $tds[0].innerHTML;
var value = $tds.eq(1).html(); // or just $tds[1].innerHTML;
Run Code Online (Sandbox Code Playgroud)