Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript slice()在控制台中正确返回,但在<;中未替换字符串;td>;_Javascript_Html_Angularjs_Bootstrap 4 - Fatal编程技术网

Javascript slice()在控制台中正确返回,但在<;中未替换字符串;td>;

Javascript slice()在控制台中正确返回,但在<;中未替换字符串;td>;,javascript,html,angularjs,bootstrap-4,Javascript,Html,Angularjs,Bootstrap 4,我在控制台中看到了预期的子字符串,但HTML中没有更改原始字符串 最终结果应该截断每个表中的任何长文本 注意:我不想在每个的HTML中使用limito,因为这个解决方案是对使用数千个表的大型应用程序的测试,我们不想手动添加对较长内容的限制 以下是我遇到问题的JS代码片段:(我将注释保留在中,因为它们是解决问题的相关尝试) 我对javascript非常陌生,所以这里可能遗漏了一些东西。非常感谢您的帮助:)当您将text传递给truncate(text,60)时,只有text变量的值被截断,HTML

我在控制台中看到了预期的子字符串,但HTML中没有更改原始字符串

最终结果应该截断每个表中的任何长文本

注意:我不想在每个
的HTML中使用limito,因为这个解决方案是对使用数千个表的大型应用程序的测试,我们不想手动添加对较长内容的限制

以下是我遇到问题的JS代码片段:(我将注释保留在中,因为它们是解决问题的相关尝试)


我对javascript非常陌生,所以这里可能遗漏了一些东西。非常感谢您的帮助:)

当您将
text
传递给
truncate(text,60)
时,只有
text
变量的值被截断,HTML内容本身不会应用任何内容

考虑将其替换为:

truncate(tableTD[i].textContent, 60)

您实际上是在截断文本,但在文本更改后,您并没有将其分配给变量

每当使用JavaScript操作字符串时,它不会改变原始字符串,而是创建一个新字符串

这意味着当使用
splice
时,必须重新分配初始变量。这可以通过改变

truncate(text, 60)

您还需要为
td
分配新值

tableTD[i].textContent = truncatedText;

完整代码
strong.keyword,
变量关键字{
字体系列:monospace;
文本转换:大写;
字体大小:1.2米;
}



在输入框中键入。输出将被截断
截断(文本,60)您没有将结果存储在任何位置<代码>切片()
不会改变原始字符串。字符串是不可变的。除非我遗漏了什么,否则你;我们没有在任何地方设置HTML,只是获取它。您的“演示”代码应该可以工作…
document.getElementById(“演示”).textContent=truncate(str,20)@jamescorrect,演示代码工作正常。我很难想出如何替换
中的文本,因为它处于循环中。我试着使用return,但结果是一样的…@Taplar你能建议我如何存储结果吗,因为它在for循环中?正如我告诉詹姆斯的那样,我尝试使用return,但效果相同。这门语言的新手很不错,所以…;)谢谢你的回答。我试过你的建议。不幸的是,它给出了同样的结果。我确实按照您的建议替换了truncate函数中的“text”,尽管“text”是定义为tableTD[I]的变量。for循环中的textContent。噢,我没有注意truncate函数的工作方式。。在您的情况下,@zfrisch的答案应该很好。谢谢@zfrisch。我完全复制了你的建议并运行了它:它仍然在做同样的事情——在控制台中是正确的,但没有进入HTML。“我丢失了一些可以替换原来的字符串的东西……”KarinaHinch表示歉意,我想我快速浏览了一下。让我看看我能做些什么谢谢你花在这个@zfrisch上的时间!你的答案基本上是正确的。我发现“returntruncatedtext”是不需要的,并且正在停止循环。去掉它,它就完美地工作了!另外,我感谢您在wrap/nowrap切换上所做的额外工作。我一定会试试你的建议:)
td {
      padding: 6px 12px;
      vertical-align: top;
      overflow: hidden;
      text-overflow: ellipsis;
      max-width: 30ch; // "ch" limits number of characters per line.
      &.nowrap {
        white-space: nowrap;
      }
      &.wrap {
        white-space: normal;
        min-width: 29ch; // so the line will not wrap before 29ch
      }
    }
truncate(tableTD[i].textContent, 60)
truncate(text, 60)
var truncatedText = truncate(text, 60)
tableTD[i].textContent = truncatedText;
    for (var i = 0; i < tableTD.length; i++){
        var text = tableTD[i].textContent;

        if(text.length > 30 ) {
            tableTD[i].classList.add('wrap');
            var truncatedText = truncate(text, 60);
            tableTD[i].textContent = truncatedText;
            return truncatedText;

        } else { tableTD[i].classList.add('nowrap'); }

    }

    function truncate(str, num){
        truncateStr = str.slice(0, (num - 2)) + '...';

        return truncateStr;
    }