【问题标题】:Return element with other added element using after() jquery使用 after() jquery 返回带有其他添加元素的元素
【发布时间】:2015-11-03 09:40:33
【问题描述】:

我需要使用 after() 函数将一些 tr 元素添加到 jQuery 中的 tr var 中,然后返回整个元素。 问题是,如果我返回 tr var,我只会得到 tr var,而不是使用 after() 添加的元素。这是函数:

    var tr = $('<tr/>');
    $('input[name^="lcs_cognome[' + num_sede +']"]').each(function(index, value){
    var attr = $(this).attr('name').split('[');
    var lcs_num = '';
    for(var i=0; i<attr[2].length-1; i++)
        lcs_num += '' + attr[2][i];

    if(index == 0)
        tr.append($('<td/>').text($('input[name="lcs_nome[' + num_sede +'][' + lcs_num + ']"]').val()))
          .append($('<td/>').text($('input[name="lcs_cognome[' + num_sede +'][' + lcs_num + ']"]').val()))
          .append($('<td/>').text($('input[name="lcs_sede_consegna[' + num_sede +'][' + lcs_num + ']"]').val()))
          .append($('<td/>').text($('input[name="lcs_indirizzo_consegna[' + num_sede +'][' + lcs_num + ']"]').val() + ' ' + $('input[name="lcs_n_civico_consegna[' + num_sede +'][' + lcs_num + ']"]').val()))
          .append($('<td/>').text($('input[name="lcs_telefono_1[' + num_sede +'][' + lcs_num + ']"]').val()));

    else
        tr.after($('<tr/>').append($('<td/>').text($('input[name="lcs_nome[' + num_sede +'][' + lcs_num + ']"]').val()))
          .append($('<td/>').text($('input[name="lcs_cognome[' + num_sede +'][' + lcs_num + ']"]').val()))
          .append($('<td/>').text($('input[name="lcs_sede_consegna[' + num_sede +'][' + lcs_num + ']"]').val()))
          .append($('<td/>').text($('input[name="lcs_indirizzo_consegna[' + num_sede +'][' + lcs_num + ']"]').val() + ' ' +$('input[name="lcs_n_civico_consegna[' + num_sede +'][' + lcs_num + ']"]').val()))
          .append($('<td/>').text($('input[name="lcs_telefono_1[' + num_sede +'][' + lcs_num + ']"]').val())));
  });
  return tr;

我也尝试用 insertAfter() 替换 after(),但没有成功。

【问题讨论】:

  • 只是一个旁注,我认为你应该在你的代码中引入小的实用函数和变量,以减少混乱并使其更具可读性,例如.getTD() 用于创建 td 元素,getVal(name) 用于所有 .val() 相关功能。

标签: javascript jquery dom append


【解决方案1】:

您必须使用insertAfter,但您需要以另一种方式返回值:

                return  $('<tr/>')
                        .append(
                            $('<td/>').text($('input[name="lcs_nome[' + num_sede +'][' + lcs_num + ']"]').val())
                        )
                        .append(
                            $('<td/>').text($('input[name="lcs_cognome[' + num_sede +'][' + lcs_num + ']"]').val())
                        )
                        .append(
                            $('<td/>').text($('input[name="lcs_sede_consegna[' + num_sede +'][' + lcs_num + ']"]').val())
                        )
                        .append(
                            $('<td/>').text($('input[name="lcs_indirizzo_consegna[' + num_sede +'][' + lcs_num + ']"]').val() + ' ' + $('input[name="lcs_n_civico_consegna[' + num_sede +'][' + lcs_num + ']"]').val())
                        )
                        .append(
                            $('<td/>').text($('input[name="lcs_telefono_1[' + num_sede +'][' + lcs_num + ']"]').val())
                        )
                    );
            }).insertAfter(tr)

最后不返回 tr,因为你返回的是 $('tr') 对象。

你有更多关于它的信息:https://stackoverflow.com/a/11114453/5035890

【讨论】:

  • 感谢您的回复。像你说的那样做的问题是我只能再向 tr var 插入一个 tr 元素,不是吗?
  • 不,tr var 有一个 jQuery 对象,你需要用所有 tr 来放大这个变量吗?如果你解释你需要什么,也许还有另一种最简单的方法来实现它
  • 我需要在表格中添加一些 tr 元素,每次用户单击按钮时都会添加到 dom 中。我需要在函数中执行此操作,因为我需要在 table.append() 函数中调用它
  • 是的,但是为什么将所有tr 存储在一个变量中并返回呢?
  • 因为在 table 元素上调用的 append() 函数内部我必须返回一个 tr 元素
猜你喜欢
  • 1970-01-01
  • 2012-03-18
  • 2011-03-24
  • 1970-01-01
  • 2013-07-14
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
相关资源
最近更新 更多