如何获取每个 LI 元素的 innerHTML 并显示为字符串?
How can I get every LI element's innerHTML and display as string?
我试图获取每个 LI 元素的内容并按顺序显示每个变量。我正在使用这个简单的练习来演示这一点,因为我刚刚编写了它并且确定它会起作用。
有 3 个列表项:Mac、PC 和 Linux。当我想在其他地方显示时,只有 Linux 出来。我做错了什么?
<html>
<body>
<p id="demo"></p>
<ul>
<li>Mac</li>
<li>PC</li>
<li>Linux</li>
</ul>
</body>
</html>
var list = document.querySelectorAll("LI");
for (var i = 0; i < list.length; i++) {
const computers = list[i].innerHTML;
var all = computers.toString();
document.getElementById("demo").innerHTML = all;
}
最后一点,我如何为每个获取的元素设置一个变量?我想你可以使用 FOR 来做到这一点,但不知道如何为每个变量设置一个自变量。
1) 你应该使用 textContent
而不是 innerText
.
2)你可以创建一个数组,然后把数据压入其中。
3) 最终,您将得到一个数组中的所有 computers
个字符串。然后你可以使用 join 它们以逗号分隔 ,
var list = document.querySelectorAll("LI");
const arr = [];
for (var i = 0; i < list.length; i++) {
const computers = list[i].textContent;
arr.push(computers);
}
document.getElementById("demo").innerHTML = arr.join(", ");
<p id="demo"></p>
<ul>
<li>Mac</li>
<li>PC</li>
<li>Linux</li>
</ul>
您的代码存在非常小的问题
试试这个
<html>
<head>
<script>
function showLi(){
var list = document.querySelectorAll("LI");
var computers='';
for (var i = 0; i < list.length; i++) {
computers += list[i].innerHTML;
var all = computers.toString();
document.getElementById("demo").innerHTML = all;
}
}
</script>
</head>
<body onload="showLi();">
<p id="demo"></p>
<ul>
<li>Mac</li>
<li>PC</li>
<li>Linux</li>
</ul>
</body>
</html>
innerHTML覆盖当前节点内html,这样你会一直显示最后一台电脑。
尝试这样的事情:
var computers = ''; // variable to contain the final string
var list = document.querySelectorAll("LI");
for (var i = 0; i < list.length; i++) {
const computer = list[i].innerHTML; // here you are getting only the li string
// var all = computers.toString();
// document.getElementById("demo").innerHTML = all;
computers += `${computer}, ${computer}`;
}
document.getElementById("demo").innerHTML = computers; // outside for loop
这是一个单行代码,它为您提供一个变量 os_list
(当您 运行 时查看 console.log)并设置 #demo
元素。
像这样的单行选项不是学习的最佳选择,但知道您会得到许多不同的答案,我想我会选择不同的东西。这是一条线:
let d=document, os_list = d.querySelector('#demo').innerHTML=[...d.querySelectorAll("li")].map(e=>e.innerText).join(', ');
下面是关于它如何运作的评论:
let d=document,
// this lets us use 'document' in a shortened way
os_list = d.querySelector('#demo').innerHTML=
// our eventual target element whose innerHTML will be populated with our result plus our variable name 'os_list' which will also get the result
[...d.querySelectorAll("li")]
// the [...spread] syntax - this basically says take the HTML collection of <li> elements and make it iterable like an array
.map(e=>e.innerText)
// map lets us take each <li> element and return the inner text. Basically we're swapping the element for the text here
.join(', ');
// all that gave us an array, and join() lets us combine it back into a comma separated string
let d=document, os_list = d.querySelector('#demo').innerHTML=[...d.querySelectorAll("li")].map(e=>e.innerText).join(', ');
console.log(os_list)
<ul>
<li>Mac</li>
<li>PC</li>
<li>Linux</li>
</ul>
<hr>
Result:
<p id="demo"></p>
我试图获取每个 LI 元素的内容并按顺序显示每个变量。我正在使用这个简单的练习来演示这一点,因为我刚刚编写了它并且确定它会起作用。
有 3 个列表项:Mac、PC 和 Linux。当我想在其他地方显示时,只有 Linux 出来。我做错了什么?
<html>
<body>
<p id="demo"></p>
<ul>
<li>Mac</li>
<li>PC</li>
<li>Linux</li>
</ul>
</body>
</html>
var list = document.querySelectorAll("LI");
for (var i = 0; i < list.length; i++) {
const computers = list[i].innerHTML;
var all = computers.toString();
document.getElementById("demo").innerHTML = all;
}
最后一点,我如何为每个获取的元素设置一个变量?我想你可以使用 FOR 来做到这一点,但不知道如何为每个变量设置一个自变量。
1) 你应该使用 textContent
而不是 innerText
.
2)你可以创建一个数组,然后把数据压入其中。
3) 最终,您将得到一个数组中的所有 computers
个字符串。然后你可以使用 join 它们以逗号分隔 ,
var list = document.querySelectorAll("LI");
const arr = [];
for (var i = 0; i < list.length; i++) {
const computers = list[i].textContent;
arr.push(computers);
}
document.getElementById("demo").innerHTML = arr.join(", ");
<p id="demo"></p>
<ul>
<li>Mac</li>
<li>PC</li>
<li>Linux</li>
</ul>
您的代码存在非常小的问题
试试这个
<html>
<head>
<script>
function showLi(){
var list = document.querySelectorAll("LI");
var computers='';
for (var i = 0; i < list.length; i++) {
computers += list[i].innerHTML;
var all = computers.toString();
document.getElementById("demo").innerHTML = all;
}
}
</script>
</head>
<body onload="showLi();">
<p id="demo"></p>
<ul>
<li>Mac</li>
<li>PC</li>
<li>Linux</li>
</ul>
</body>
</html>
innerHTML覆盖当前节点内html,这样你会一直显示最后一台电脑。
尝试这样的事情:
var computers = ''; // variable to contain the final string
var list = document.querySelectorAll("LI");
for (var i = 0; i < list.length; i++) {
const computer = list[i].innerHTML; // here you are getting only the li string
// var all = computers.toString();
// document.getElementById("demo").innerHTML = all;
computers += `${computer}, ${computer}`;
}
document.getElementById("demo").innerHTML = computers; // outside for loop
这是一个单行代码,它为您提供一个变量 os_list
(当您 运行 时查看 console.log)并设置 #demo
元素。
像这样的单行选项不是学习的最佳选择,但知道您会得到许多不同的答案,我想我会选择不同的东西。这是一条线:
let d=document, os_list = d.querySelector('#demo').innerHTML=[...d.querySelectorAll("li")].map(e=>e.innerText).join(', ');
下面是关于它如何运作的评论:
let d=document,
// this lets us use 'document' in a shortened way
os_list = d.querySelector('#demo').innerHTML=
// our eventual target element whose innerHTML will be populated with our result plus our variable name 'os_list' which will also get the result
[...d.querySelectorAll("li")]
// the [...spread] syntax - this basically says take the HTML collection of <li> elements and make it iterable like an array
.map(e=>e.innerText)
// map lets us take each <li> element and return the inner text. Basically we're swapping the element for the text here
.join(', ');
// all that gave us an array, and join() lets us combine it back into a comma separated string
let d=document, os_list = d.querySelector('#demo').innerHTML=[...d.querySelectorAll("li")].map(e=>e.innerText).join(', ');
console.log(os_list)
<ul>
<li>Mac</li>
<li>PC</li>
<li>Linux</li>
</ul>
<hr>
Result:
<p id="demo"></p>