来自不同数组的不同值并在表中并排附加在一起
Posted
技术标签:
【中文标题】来自不同数组的不同值并在表中并排附加在一起【英文标题】:Different values from different arrays and append together beside one another in a table 【发布时间】:2016-01-27 04:45:06 【问题描述】:所以,我目前正在尝试通过 express(socket.io) 和 node.js 从数组 chanArrId 和 chanArrName 中提取两个不同的数组值。
然后,一旦我将它们显示在同一行 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。
下面是最新的代码已经调整,看看一直在努力完成什么。
客户端
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;
希望大家多多指教。
【问题讨论】:
“然后就休息”:你能说得更具体点吗? @BadZen 抱歉,我已经更新了这个问题,当你添加一组以上的值时会发生什么。 客户端代码中的缩进很奇怪。要么你的花括号放错了,要么你嵌套了具有相同索引变量的 for 循环。两者似乎都不正确。 【参考方案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>');
);
编辑:
上面的代码是在 cmets 之后更新的。此版本将每个TD
的HTML 连接到一个变量中,然后最终将其包装在TR
标记中并将其附加到$sipname
。我对变量$sipname
没有任何看法,所以我认为它设置正确。
您肯定需要解决一件事:
代码为生成的节点的id
属性设置值,但始终相同。这在 HTML 中是不可接受的:id 在文档中应该是唯一的。
【讨论】:
它的位置问题不是让它在每个 td 之后附加值,它目前在末尾附加所有频道 ID。 感谢您已经接受了答案。阅读您的评论后,我已对其进行了更新。让我知道结果如何。 已经完成了这一切,我设法以另一种方式开始工作,这基于我自己在 express 的服务器端的设置更有意义。将其发布在下面以获取替代解决方案。编辑:您在上面发布的解决方案也与我今天早些时候发布的问题相同。【参考方案2】:这就是我最终设法解决的方法:
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 & Channel.id
我刚开始将值与 sipname 一起调用,因为它们每次都将具有相同的一组值,并且还会同时添加或删除。
希望这是有道理的。
这就是我最终为那些想要替代解决方案的人使用它的方式。
【讨论】:
以上是关于来自不同数组的不同值并在表中并排附加在一起的主要内容,如果未能解决你的问题,请参考以下文章
从两个不同的图表创建组合的单个条形图或直方图,并在第 1 年和第 2 年中并排显示条形图