仅执行一次DOM迭代

时间:2017-01-03 11:53:14

标签: javascript jquery

我有一个表格行,单元格中有一个按钮。当我单击该按钮时,我想将同一行的每个其他单元格内的文本分配给变量。因此,如果我有5个单元格,我将有4个变量(第5个是按钮)。

我现在所做的是:

$('.save').click(function(e){
    var id = $(this).closest('tr').find('.id').text();
    var x = $(this).closest('tr').find('.x').text()
});

this指的是按钮,因此我必须向上导航到包含tr并向下导航到每个单元格。有没有办法避免必须遍历每个变量的dom?换句话说,要关注该行而不是每次重复$(this).closest('tr')? 注意:我不是指仅仅写它而是指后面的动作。因此var row = $(this).closest('tr')之类的东西不是解决方案,因为无论如何都会再次执行查找行的操作。

3 个答案:

答案 0 :(得分:3)

  

因此var row = $(this).closest('tr')之类的东西不是解决方案,因为无论如何都会再次执行查找行的操作。

不,它不会。它将执行一次(发生点击时),并且结果(包含在tr元素周围的jQuery对象)存储在{ {1}}变量。这就是你如何做到的。

row

答案 1 :(得分:0)

我认为var tr = $(this).closest("tr")可以解决这个问题,因为你不必再去那一行了。

答案 2 :(得分:-1)

使用dataset属性扩展按钮标记,并在发生点击时使用所需的数据:

<button data-id="some-id" data-x="some-x" ...>

因此,您可以使用必需的属性生成此按钮,并且不需要始终检查DOM。

$('.save').click(function(e){
    var id = $(this).data('id');
    var x = $(this).data('x');
});