Javascript slice()在控制台中正确返回,但在<;中未替换字符串;td>;
我在控制台中看到了预期的子字符串,但HTML中没有更改原始字符串 最终结果应该截断每个表中的任何长文本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中使用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;
}