Javascript 为什么断线(\n)不';我的代码不工作?

Javascript 为什么断线(\n)不';我的代码不工作?,javascript,php,css,function,formatting,Javascript,Php,Css,Function,Formatting,我正在创建电视提供商和联系人表 您可以在此处看到的一般功能: 表是以这样的方式构造的,即每行中都有一个带有提供者的按钮。单击此按钮后,下一行将在clicked one下打开,显示联系人信息 ContactRow包含2个单元格。在第一封信里,我把电子邮件放在第二个电话号码里。然而,它并没有很好地呈现,联系人看起来像是被吐出来的,而不是正确格式化的 一般的想法是,我想使用\n或的任何其他替代方法,以便我可以将contactRow格式化为如下所示的“表格”: EMAIL1@EXAMPLE.COM

我正在创建电视提供商和联系人表

您可以在此处看到的一般功能:

表是以这样的方式构造的,即每行中都有一个带有提供者的按钮。单击此按钮后,下一行将在clicked one下打开,显示联系人信息

ContactRow包含2个单元格。在第一封信里,我把电子邮件放在第二个电话号码里。然而,它并没有很好地呈现,联系人看起来像是被吐出来的,而不是正确格式化的

一般的想法是,我想使用
\n

的任何其他替代方法,以便我可以将contactRow格式化为如下所示的“表格”:

EMAIL1@EXAMPLE.COM    |    0-000-000-000
EMAIL2@EXAMPLE.COM    |
EMAIL3@EXAMPLE.COM| 0-000-000-000

程序的工作方式如下:

  • 我使用php从
    contacts.txt
  • 单击带有提供程序的按钮将调用JavaScript函数
    specialFunc()
    传递位于按钮内部的提供程序
  • specialFunc()
    调用它内部的
    addRow()
    函数,这两个函数都将在下面的伪代码中解释
  • 文件
    contacts.txt
    是这样创建的:

    PROVIDER1;EMAIL1@EXAMPLE.COM EMAIL2@EXAMPLE.COM;0-000-000-000 0-000-00-00
    提供者2;EMAIL1@EXAMPLE.COM;0-000-000-000 0-000-00-00;
    提供者3;EMAIL1@EXAMPLE.COM EMAIL2@EXAMPLE.COM;0-000-000-000

    因此,电子邮件和电话号码的数量可能从0到6不等。 JavaScript函数通过读取
    之前的第一个单词来选择联系人

    你能在视频中看到格式非常好的电子邮件的原因是,在
    .css
    文件中,我将EmailCell和PhoneCell设置为包装文本,所以在电子邮件中,第一个适合,第二个不适合,这就是为什么它移到另一行的原因。然而,这不是一个好方法,因为如果有短电子邮件,就有相同的行

    我试图通过
    contacts.txt中的每个电话号码分开用于测试和重新制作线路:
    provInfoPhone=contactsFromTxt[2]

    provInfoPhone=contactsFromTxt[2]+“\n”+concatsFromTXT[3]

    然而,这没有任何帮助。它既不会以html格式打印为“\n”,也不会断行并移动到下一行

    addRow(ProperIndexOfRow{wheretoinsert}){
        *code reffering to correct table, to correct position where to insert newRow*
        *code deleting previously added row(when someone is zapping over buttons)*
        let newCell = newRow.insertCell(0);
        let newText = document.createTextNode(provInfoEmail);
        newCell.appendChild(newText);
        let newCell2 = newRow.insertCell(1);
        let newText2 = document.createTextNode(provInfoEmail);
        newCell.appendChild(newText2);
    }
    
    
    specialFunc(prov) {
        switch(prov):
            case "EXAMPLE1":
                provInfoEmail = contactsFromTxt[1];
                provInfoPhone = contactsFromTxt[2];
                break;
            case "EXAMPLE2":
                provInfoEmail = contactsFromTxt[1];
                provInfoPhone = contactsFromTxt[2];
                break;
            [...]
        addRow(properIndex);
    }
    

    你能帮我吗?我知道我的问题需要大量的阅读和理解,但我相信我缺乏解决这些问题的一些基本方法。

    正如我想你知道的,HTML中的所有空白(包括制表符和换行符)都呈现为一个普通的空间。要在不使用CSS属性的情况下获得换行符,需要将它们分隔为不同的文本节点,中间有一个
    br
    元素。大致:

    let newCell2 = newRow.insertCell(1);
    let first = true;
    for (const entry of provInfoEmail.split("\n")) {
        if (first) {
            first = false;
        } else {
            newCell.appendChild(document.createElement("br"));
        }
    }
    

    该post处理包含
    \n
    的字符串。显然,如果你能早点做(当你想知道
    \n
    应该在哪里时),那会更好。

    首先谢谢你的回复。我知道制表符和空间被渲染为单个普通空间,但是我忘记了换行符被渲染为相同的方式。我相信我无法正确理解提供的代码。据我所知,它应该放在
    AddRow
    newCell2
    之后,但在
    let newText2
    之前,我这样做了。不幸的是,代码不起作用。我是否应该以某种方式更改
    (provInfoEmail.split(“\n”)的常量条目)
    ?我相信这是我唯一不明白的事情。另外,我应该对电话号码执行相同的for循环,不是吗?最原始的方法永远是最后一条生命线,就是修改
    contacts.txt
    ,以便每个电话号码都添加“`”(硬空间,在numpad上保留alt+0160),但程序员不应该这样编写程序(@kaszankabanka-上面的代码将替换(provInfoEmail.split(“\n”)的const entry)的
    addRow
    的最后三行。
    通过调用
    split
    来拆分每个
    \n
    出现的字符串,从而循环遍历数组。
    entry
    将依次为数组中的每个字符串。