split方法返回一个数组。它不会更改字符串本身。所以你的台词:
我正试图将h1元素的每个字符放在一个span中。
console.log(text)
显示了每个字符的跨度,and console.log(string)
显示了正确的文本。为什么结果没有加载到我的页面上?
var header = document.createElement("div");
document.body.appendChild(header);
var heading = document.createElement("h1");
header.appendChild(heading);
heading.setAttribute('class', 'spanify');
var headingText = document.createTextNode("Blah blah");
heading.appendChild(headingText);
var text = document.getElementsByClassName("spanify");
var string = text[0].innerText;
string.split("");
text.innerHTML = "";
for (i = 0; i < string.length; i += 1) {
text.innerHTML += "<span>" + string[i] + "</span>";
}
span {
background: pink;
}
string.split("")
什么都不做。我认为你必须做:var newVar = string.split("")
。然后必须对数组newVar执行for循环,而不是对字符串执行for循环。
我尝试了两个版本的代码,结果如下:
这项工作:
<script>
var string = "Blah Blah";
var newVar = string.split("");
let result = "";
for(i = 0; i < newVar.length; i+=1) {
result += "<span>" + string[i] + "</span>"
}
console.log(result);
这不起作用:
var string = "Blah Blah";
string.split("");
let result = "";
for(i = 0; i < string.length; i+=1) {
string += "<span>" + string[i] + "</span>"
}
console.log(result)
</script>
我认为这个问题确实涉及到我上面所说的内容,但我正在编辑我的答案,以包含一个解决其他一些问题的代码片段。我使用了管道字符而不是span元素,因为它们在页面上是可见的,而要查看span,必须查看底层HTML。希望这是有用的:
var header = document.createElement("div");
document.body.appendChild(header);
var heading = document.createElement("h1");
header.appendChild(heading);
heading.setAttribute('id', 'spanify');
var headingText = document.createTextNode("Blah blah");
heading.appendChild(headingText);
var text = document.querySelector("#spanify");
var string = text.innerText;
var newVar = string.split("");
text.innerHTML = "";
for (i = 0; i < newVar.length; i += 1) {
text.innerHTML += newVar[i] + "|";
}
heading.innerHTML = text.innerHTML;
span {
background: pink;
}