Почему создается пустой элемент в массиве?
Почему при использовании метода .split("\n") появляется пустой элемент в массиве Все действия, которые мне необходимо выполнить const textareaValue = output.value.split("\n").sort().join(" "); Было бы круто если бы еще подсказали как вывести новый результат на новых строках
"use strict";
window.addEventListener("DOMContentLoaded", () => {
const add = document.querySelector("#add"),
input1 = document.querySelector("#input-1"),
output = document.querySelector("#output"),
sortByName = document.querySelector("#sort-by-name");
add.addEventListener("click", () => {
const nameValue = input1.value;
if (/^([a-zA-Z0-9' ']+=[a-zA-Z0-9' ']+)$/.test(nameValue)) {
output.textContent += nameValue + "\n";
} else {
alert("Sorry, you can put only alpha-numeric characters");
}
});
sortByName.addEventListener("click", () => {
const textareaValue = output.value.split("\n");
console.log(textareaValue);
output.innerText += textareaValue;
});
});
.items {
margin: 0 auto;
padding: 50px;
list-style-type: none;
max-width: 450px;
display: grid;
grid-template-columns: 75% 25%;
justify-content: center;
gap: 10px;
color: #000000;
}
.title {
margin: 0;
}
.items .item:nth-child(1) {
grid-column: 1 / 3;
grid-row: 1 / 2;
}
.items .item:nth-child(2) {
grid-column: 1 / 2;
grid-row: 2 / 3;
}
.items .item:nth-child(3) {
grid-column: 2 / 3;
grid-row: 2 / 3;
align-self: end;
}
.items .item:nth-child(4) {
grid-column: 1 / 2;
grid-row: 3 / 4;
}
.items .item:nth-child(5) {
margin-top: 17.6px;
grid-column: 2 / 3;
grid-row: 3 / 4;
display: flex;
flex-direction: column;
justify-content: space-between;
}
textarea {
height: 200px;
resize: none;
}
input,
textarea,
button {
width: 90%;
color: #000000;
padding: 3px 5px;
border-radius: 0;
background-color: #ffffff;
border: 1px solid #000000;
}
input:focus,
textarea:focus,
button:focus {
outline: none;
}
button {
width: max-content;
cursor: pointer;
background-color: rgb(243 238 238);
}
<ul class="items">
<li class="item">
<h1 class="title">Test</h1>
</li>
<li class="item">
<label for="input-1">Name/Value Pair</label>
<input type="text" id="input-1" name="input-1" placeholder="Name=Value" />
</li>
<li class="item">
<button type="button" id="add">Add</button>
</li>
<li class="item">
<label for="output">Name/Value Pair List</label>
<textarea id="output" name="output"></textarea>
</li>
<li class="item">
<button type="button" id="sort-by-name">Sort by Name</button>
<button type="button">Sort by Value</button>
<button type="button">Delete</button>
<button type="button">Show XML</button>
</li>
</ul>
Ответы (1 шт):
Ты добавляешь в textarea значения вот так:
output.textContent += nameValue + "\n";
Получается у тебя в конце есть доп. знак \n. Split разбивает строку по разделителю. Если можно так выразиться: он берет кусок слева от разделителя и справа от разделителя и помещает эти оба куска в массив. Это упрощённо для понимания. Так как после последнего \n ничего нет, метод берёт слева слово, а справа пустоту, потому что ему надо что-то взять слева и справа от разделителя.
Так что либо не добавляй в конце \n, добавляй его, например, перед очередной вставкой, либо обрезай его, каким-нибудь trim, т.е.
output.value.trim('\n').split("\n");
