Javascript 如何在不将数据放入DOM的情况下有效地存储与DOM相关的数据?
如果我创建了一个表示数据库表的表,并且我想拥有像add/edit/delete这样的函数,而我使用的是jquery,那么我如何避免必须进行3-4.parent()调用才能获得所需的表数据呢?在这个场景中,我谈论的是允许用户对列进行排序的ASC/DESC箭头。箭头需要触发一个到PHP的AJAX post,因此它还需要发送数据库表名,通常还有一个行id。但是除了将这些信息附加到每个排序箭头之外,我还必须遍历DOM树,我认为这一定是错误的做法 我认为这也可以归结为不在DOM中存储数据,但我真的不知道另一种方法是什么 示例 我使用预先制作的表格模板,例如Javascript 如何在不将数据放入DOM的情况下有效地存储与DOM相关的数据?,javascript,jquery,Javascript,Jquery,如果我创建了一个表示数据库表的表,并且我想拥有像add/edit/delete这样的函数,而我使用的是jquery,那么我如何避免必须进行3-4.parent()调用才能获得所需的表数据呢?在这个场景中,我谈论的是允许用户对列进行排序的ASC/DESC箭头。箭头需要触发一个到PHP的AJAX post,因此它还需要发送数据库表名,通常还有一个行id。但是除了将这些信息附加到每个排序箭头之外,我还必须遍历DOM树,我认为这一定是错误的做法 我认为这也可以归结为不在DOM中存储数据,但我真的不知道另
<table id = "users">
<tr>
<th>Name</th>
<div class = "sortingArrows">
<div class = "sortAsc"></div>
<div class = "sortDesc"></div>
</div>
</tr>
<tr>
<td><span name = "user_name"></span></td>
</tr>
</table>
使用.closest()
附言:
是tr
的无效子级。使用
或
(在您的特定情况下)使用.closest()
附言:
是tr
的无效子级。使用
或
(在您的特定情况下)您是否要求获取它所属的表的id
jQuery为此提供了函数
var tableName = $(this).closest('table').attr('id');
您是否要求获取它所属的表的id jQuery为此提供了函数
var tableName = $(this).closest('table').attr('id');
回答“如何避免在DOM中设置值”部分。答案是使用闭包模式,如下所示
var C = (function(){
var myNodes = {};
return {
getNode: function(name) { return myNodes[name];},
setNode: function(name, value) { myNodes[name] = value; }
}
})();
您现在可以使用getNode和setNode设置和检索值,而不必在dom中公开它们,如
C.setNode('value',7);
C.setNode('xyz', $(this) );
C.getNode('value'); // returns 7
回答“如何避免在DOM中设置值”部分。答案是使用闭包模式,如下所示
var C = (function(){
var myNodes = {};
return {
getNode: function(name) { return myNodes[name];},
setNode: function(name, value) { myNodes[name] = value; }
}
})();
您现在可以使用getNode和setNode设置和检索值,而不必在dom中公开它们,如
C.setNode('value',7);
C.setNode('xyz', $(this) );
C.getNode('value'); // returns 7
不过,这是可以接受的做法吗?将数据存储在DOM中不是一件坏事吗?如果数据与信息的实际显示有关,那么在DOM中存储数据就可以了。在你的情况下,你是在偷工减料,以加快排序操作,我认为这很好。但是,如果您要添加可能用于AJAX调用或其他内容的附加信息,我认为最好在对象中维护这些数据?将数据存储在DOM中不是一件坏事吗?如果数据与信息的实际显示有关,那么在DOM中存储数据就可以了。在你的情况下,你是在偷工减料,以加快排序操作,我认为这很好。但是,如果您要添加可能用于AJAX调用或其他内容的附加信息,我认为您最好在对象中维护这些数据。为什么不直接使用对象?
C
本身就是一个容器对象,因为它包含方法。对象已经有get和set,这只是一个全局对象。当然,这只是一个get/set——关键是,您可以使用闭包模式来创建get/set之外的更多功能。为什么不使用对象?C
本身就是一个容器对象,因为它包含方法。一个对象已经有get和set,这只是一个全局对象。当然,这只是一个get/set——关键是您可以使用闭包模式在get/set之外创建更多的功能