Javascript 如何在不将数据放入DOM的情况下有效地存储与DOM相关的数据?

Javascript 如何在不将数据放入DOM的情况下有效地存储与DOM相关的数据?,javascript,jquery,Javascript,Jquery,如果我创建了一个表示数据库表的表,并且我想拥有像add/edit/delete这样的函数,而我使用的是jquery,那么我如何避免必须进行3-4.parent()调用才能获得所需的表数据呢?在这个场景中,我谈论的是允许用户对列进行排序的ASC/DESC箭头。箭头需要触发一个到PHP的AJAX post,因此它还需要发送数据库表名,通常还有一个行id。但是除了将这些信息附加到每个排序箭头之外,我还必须遍历DOM树,我认为这一定是错误的做法 我认为这也可以归结为不在DOM中存储数据,但我真的不知道另

如果我创建了一个表示数据库表的表,并且我想拥有像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之外创建更多的功能