来自不同数组的不同值并在表中彼此相邻

时间:2015-10-27 16:40:00

标签: javascript jquery arrays node.js express

所以,我正在尝试从数组中提取两个不同的数组值chanArrId& chanArrName via express(socket.io)&的node.js。

然后我将它们显示在同一行E:G

的表格中
<tr class="exe">
    <td>SIP/487-00000060</td>                                       
    <td>0000000001</td>                                 
</tr>

<tr class="exe">
    <td>SIP/488-00000060</td>                                       
    <td>0000000002</td>                                 
</tr>

然后为下一个集合取一个新行,对以下通道值执行相同操作。

当我添加另一个拉出接下来的两个而不重复自己。我取得了一些成功但总是很短暂,错误的定位或重复的价值观。

我使用一个值可以正常工作但不是两个都这样:

呼叫分机488:将频道名称和值添加到数组等页面中。

适用于第一个工作正常,如顶部所见,它工作宏,然后当我添加第二对值时,我得到以下内容:

<tr class="exe" id="exe">                                    
    <td>SIP/487-00000060</td>
    <td>1445964898.228</td>
    <td>1445964898.2281445964900.229</td>
</tr>

它会跳过SIP名称,然后在下一行添加两个通道ID。

以下是最新的代码一直在调整,以了解ave一直试图完成的事情。

客户端

socket.on('sipname', function (data,datad) {
        var sipname = '';
        var sipid = '';
        $(".exe").remove();
        for (i = 0; i < data.length; i++) {
            sipname += data[i];
            if (sipname) {
                $sipname.append('<tr class="exe" id="exe">\
                                    <td id="siptd">' + sipname + '</td>');
    }
    for (i = 0; i < datad.length; i++) {
            sipid += datad[i];
            if (sipid) {
                $('#sipTable td:last').after('<td>' + sipid + '</td></tr>');
            }   
            } 
            sipid = '';
        }
    });

服务器端功能

  function updateSip() {
    io.sockets.emit('sipname', chanArrName,chanArrId);
    chandump();
  }

停滞:将值推送到数组

 bridge.addChannel({
        channel : channel.id
      }, function (err) {
        var name = chanArrName.push(channel.name)
        var id = chanArrId.push(channel.id)
          updateSip();

        if (err) {
          throw err;
        }

希望你们能给我一些指导。

2 个答案:

答案 0 :(得分:1)

在客户端代码中,您有一个嵌套的for循环,其索引变量与外循环相同,这意味着外部循环不会按预期运行多次。

此外,+=运算符会将新值连接到以前的值,并解释您注意到的连接通道ID。您已经逐步扩展了DOM节点,因此无需使用+=。只需分配。对于外部循环也是如此:只需使用sipname分配给=

正确缩进代码也可能有助于调试它。

最后,使用var声明您的索引变量。

通过这些更正,您可以得到:

socket.on('sipname', function (data, datad) {
    var sipname, sipid, dataHtml;
    $(".exe").remove();
    for (var i = 0; i < data.length; i++) {
        sipname = data[i];
        if (sipname) {
            dataHtml = '<td id="siptd">' + sipname + '</td>';
            for (var j = 0; j < datad.length; j++) {
                sipid = datad[j];
                if (sipid) {
                    dataHtml += '<td>' + sipid + '</td>';
                }
            } 
            $sipname.append('<tr class="exe" id="exe">' + dataHtml + '</tr>');
        }
    }
});

编辑:

以上代码在评论后更新。此版本连接变量中每个TD的HTML,然后最终将其包装在TR标记中并将其附加到$sipname。我对变量$sipname没有看法,所以我认为它设置正确。

有一件事你当然需要解决:

代码设置生成节点的id属性的值,但始终是相同的。这在HTML中是不可接受的:文档中的id应该是唯一的。

答案 1 :(得分:0)

这就是我最终设法解决的问题:

socket.on('sipname', function (data, datad) {
        var sipname = '';
        var sipid = '';
        $('.exe').remove();
        for (var i = 0; i < data.length; i++) {
            sipname = data[i];
            sipid = datad[i];
            if (sipname) {
                $sip.html('<tr class="exe">\
                                <td class="sipid">' + sipid + '</td>\
                                <td class="sipname">' + sipname + '</td>\
                                <td><button class="btn btn-default mute" id="mute" type="submit"><span>Mute</span></button></td>\
                                <td><button class="btn btn-default kick" id="kick" type="submit">Kick</button></td>\
                                </tr>');
            }
        }
    });

因为我在服务器端同时处理这两个数组,以及每次将它们拉出到网页时都是如何直接相关的我只是E.G Channel.name&amp; Channel.id

我刚开始调用值和sipname,因为它们每次都会有相同的值集,同时也会被添加或删除。

希望这是有道理的。

对于那些想要替代解决方案的人来说,这就是我最终的工作方式。