【问题标题】:Concatenate in Javascript在 Javascript 中连接
【发布时间】:2022-11-02 03:15:49
【问题描述】:

我使用 javascript 连接表中的两列:

var ruta = document.getElementById('ruta1').innerHTML;
    var desborde = document.getElementById('desborde1').innerHTML;
    document.getElementById('concatenate').innerHTML += '' + ruta + '' + desborde;
<table id="Enrut_calx" class="table table-striped">
                <thead class="thead-dark">
                    <tr>
                        <th class="text-center">Ruta 1</th>
                        <th class="text-center">Desborde 1</th>
                    </tr>
                </thead>
                @foreach (var item in Model)
                {
                    <tr>                    
                        <td class="text-center" id="ruta1">
                            @Html.DisplayFor(modelItem => item.RUTA_1)
                        </td>
                        <td class="text-center" id="desborde1">
                            @Html.DisplayFor(modelItem => item.DESBORDE_1)
                        </td>
                        <td class="text-center" id="concatenate">
                            @Html.DisplayFor(modelItem => item.DESBORDES)
                        </td>
                       
                    </tr>
                }
            </table>

我的结果是:

但是,尽管它在图像中显示的结果是我需要的,但在其他行中它没有向我显示相同的结果并且它使行变为空白。

如果有人可以指导我,我将不胜感激。

【问题讨论】:

  • 如果您希望页面代码正常工作,则不能将相同的 id 值赋予多个元素。改为给元素 class 值。
  • JavaScript 只允许一个元素具有相同的 id。为什么要使用 JavaScript 来组合它而不是使用模板语言?

标签: javascript blazor concatenation


【解决方案1】:

我不确定这是否是问题所在,但您在 foreach 循环内的行中有“硬编码”ID。

因此,该循环将生成许多具有相同 ID(ruta1、desborde1 和 concatenate)的 DOM 对象,当您尝试执行“document.getElementById('ruta1')”时,您不再找到一个元素,您会发现许多具有相同 ID 的元素(这不应该发生)。

所以我的建议是,更新这部分:

   <td class="text-center" id="ruta1">
     @Html.DisplayFor(modelItem => item.RUTA_1)
   </td>
   <td class="text-center" id="desborde1">
     @Html.DisplayFor(modelItem => item.DESBORDE_1)
   </td>
   <td class="text-center" id="concatenate">
     @Html.DisplayFor(modelItem => item.DESBORDES)
   </td>

为每列生成不同的 ID,例如 ruta1_1、ruta1_2、ruta1_3 使用末尾的索引。 (对desborde1重复相同的逻辑,并连接)

希望对你有帮助!

【讨论】:

  • 您好 Facundo,我已经更改了 ID 的名称,但它在第一行标记了结果,其他的仍然是空白的 :(
  • 你更新了javascript代码吗?你也应该在那里做一个循环现在你只是分配一个字段的值,你应该对每一行做同样的事情
  • 您好 facuendo,更改 ID 的名称,分配名称,例如:value1_1 等,就像 javascript 进行更改一样,但问题仍然存在。
  • 咦,这很奇怪,你可以在执行程序的同时打开开发者工具吗? (如果您使用的是 Chrome,您只需要按 F12)您可以在那里看到一个控制台,您是否遇到任何错误?
【解决方案2】:

您没有具体说明为什么要使用 Javascript,而您使用的语法让我相信您使用的是 Blazor。

也许我遗漏了一些东西,但是像下面这样做似乎更容易,当 Blazor 可以为您完成所有这些时,不需要 JavaScript。这是 Blazor 和 Razor 语法存在的核心用例。

<table id="Enrut_calx" class="table table-striped">
                <thead class="thead-dark">
                    <tr>
                        <th class="text-center">Ruta 1</th>
                        <th class="text-center">Desborde 1</th>
                    </tr>
                </thead>
                @foreach (var item in Model)
                {
                    <tr>                    
                        <td class="text-center" id="ruta1">
                            @item.RUTA_1
                        </td>
                        <td class="text-center" id="desborde1">
                            @item.DESBORDE_1
                        </td>
                        <td class="text-center" id="concatenate">
                            @(item.RUTA_1 + " " +  item.DESBORDE_1)
                        </td>
                       
                    </tr>
                }
</table>

【讨论】:

  • 你好 Kevon,基本上我的目标是能够连接两列,但是在 javascript 中执行此操作时,它只在一行中显示结果。在查看您的评论时,我按照您的示例进行操作,只是将其放在括号中,现在我得到了我想要的。感谢您的 cmets 和示例,它对我帮助很大。谢谢。
  • 根据您的示例,只需修改如下部分: <td class="text-center"> @(item.RUTA_1 + " " + item.DESBORDE_1) </td>
  • 我很高兴它对你有用。我编辑了这个例子。你是对的,我没有测试我的代码。如果你能接受这个作为你的答案,这将对每个人都非常有帮助。
猜你喜欢
  • 2013-10-13
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 2021-02-05
相关资源
最近更新 更多