Я изучаю javaScript, и я хочу скомпилировать массив и отображать в HTML как список. Как я могу это сделать?
Массив: var array = ['Slide 1', 'Slide 2', 'Slide 3', 'Slide 4', 'Slide 5', 'Slide 6', 'Slide 7', 'Slide 8', 'Slide 9'];
JavaScript:
function listItem(item){
for (var i = 0; i < item.array.length; i++){
var list = item.array[i];
list = document.createElement('li');
document.getElementByClass('box').appendChild(list);
console.log(list);
}
}
<div class ="box"><ul></ul></div>
Хотя все предоставленные ответы работают, и все в порядке - все они страдают от одной и той же проблемы - в том, что они добавляют этот элемент в DOM с каждой итерацией. С небольшим списком это не будет проблемой, но если вы имеете дело с большим количеством элементов, которые вы хотите в своем списке, то постоянная обработка hte DOM будет иметь стоимость исполнения.
Намного лучше (IMO) построить одну строку li, а затем, когда массив будет полностью повторен через - передайте строку в UL, используя.innerHTML - в DOM за одно действие. Тот же результат - но быстрее.
var slides = ["slide 1", "slide 2", "slide 3", "slide 4", "slide 5"]
var str = '<ul>'
slides.forEach(function(slide) {
str += '<li>'+ slide + '</li>';
});
str += '</ul>';
document.getElementById("slideContainer").innerHTML = str;
<div id="slideContainer"></div>
Довольно простой:
var array = ["slide 1", "slide 2", "slide 3", "slide 4", "slide 5"]
array.forEach(function(item) {
var li = document.createElement("li");
var text = document.createTextNode(item);
li.appendChild(text);
document.getElementById("myUl").appendChild(li);
});
<ul id="myUl"></ul>
Этот код выполняет следующие действия:
<li>
<li>
<li>
в <ul>
Все это становится намного проще, если вы используете jQuery:
var array = ["slide 1", "slide 2", "slide 3", "slide 4", "slide 5"];
array.forEach(function(item) {
$("#myUL").append("<li>" + item + "</li>");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="myUL">
</ul>
EDIT: Если вы хотите использовать обычный цикл for вместо forEach, вы можете сделать так:
var array = ["slide 1", "slide 2", "slide 3", "slide 4", "slide 5"];
for (i = 0; i < array.length; i++) {
var li = document.createElement("li");
var text = document.createTextNode(array[i]);
li.appendChild(text);
document.getElementById("myUl").appendChild(li);
}
<ul id="myUl"></ul>
Единственное отличие этого кода заключается в том, что вместо использования встроенного метода forEach для циклического прохождения массива и выполнения операций над каждым элементом мы вместо этого вручную перебираем индексы массива.
Вы можете использовать метод сокращения ES6 и шаблонные литералы. Вы можете использовать их следующим образом:
var array = ['Slide 1', 'Slide 2', 'Slide 3', 'Slide 4', 'Slide 5', 'Slide 6', 'Slide 7', 'Slide 8', 'Slide 9'],
// Reduce will iterate over all the array items and returns a single value.
listItems = array.reduce((result, item) => {
// Add a string to the result for the current item. This syntax is using template literals.
result += '<li>${item}</li>';
// Always return the result in the reduce callback, it will be the value or result in the next iteration.
return result;
}, ''); // The '' is an empty string, it is the initial value result.
// Get the element from the DOM in which to display the list, this should be an ul or ol element.
resultElement = document.getElementById('result');
// Set the inner HTML
resultElement.innerHTML = listItems;
<ul id="result"></ul>
Для получения дополнительной информации о сокращении см. Здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce. И если вы хотите узнать больше о шаблонных литералах, проверьте здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
${item}
?
Попробуйте это, также вы можете добавить в список
var arr = [
Math.random().toFixed(2),
Math.random().toFixed(2),
Math.random().toFixed(2),
Math.random().toFixed(2),
Math.random().toFixed(2)
];
console.log(arr);
var ul = document.createElement('ul');
ul.className = 'myUL';
document.getElementById('container').appendChild(ul);
function myFunction() {
// for(var i =0;i<5;i++){
// arr.push(Math.random().toFixed(2));
// }
create(arr);
}
function create(arr){
arr.forEach(function(data){
var li = document.createElement('li');
ul.appendChild(li);
li.innerHTML += data;
li.className = "myList";
});
}create(arr);
#container .myUL{
padding:0px;
}
#container .myUL .myList {
list-style-type: none;
border:1px solid grey;
padding:5%;
border-radius:5px;
margin:4px;
}
.click{
width:80px;
height:30px;
border-radius:5px;
color:#fff;
background:#323232;
font-size:15px;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<!-- create a ul li using js -->
<button class="click" onclick="myFunction()">Click Me</button>
<div id="container"></div>
</body>
</html>
Преобразуйте массив в строку, используя Array # join и используя теги элемента списка в качестве разделителей. Добавьте начальный и конечный теги вручную, используя конкатенацию строк (+
). Назначьте строку элементу списка (ul#target
), используя элемент # innerHTML:
var array = ['Slide 1', 'Slide 2', 'Slide 3', 'Slide 4', 'Slide 5', 'Slide 6', 'Slide 7', 'Slide 8', 'Slide 9'];
target.innerHTML = '<li>' + array.join('</li><li>') + '</li>';
<ul id="target"></ul>
<div class ="box"><ul></ul></div>
. Как я могу это сделать?<ul></ul>
на<div></div>
. Ваше решение не должно было создаватьcreateElement
. Что я использую, как это сделать?