En kolay çözüm, metni eklediğiniz öğenin aşağıdaki CSS özelliğiyle stilini belirlemektir:
white-space: pre-wrap;
Bu özellik , eşleşen elemanlar içindeki beyaz boşlukların ve satırsonlarının a içindekilerle aynı şekilde ele alınmasına neden olur <textarea>. Yani, ardışık beyaz boşluklar daraltılmaz ve satırlar açık yeni satırlarda kesilir (ancak öğenin genişliğini aşarlarsa otomatik olarak kaydırılırlar).
Şimdiye kadar burada yayınlanan cevapların birçoğunun HTML yerleştirmeye açık olduğu (örneğin, çıkış karaktersiz kullanıcı girdisi atadıkları için innerHTML) veya yanlış olduğu göz önüne alındığında, orijinal kodunuza dayanarak bunu güvenli ve doğru şekilde nasıl yapacağınıza dair bir örnek vereyim:
document.getElementById('post-button').addEventListener('click', function () {
var post = document.createElement('p');
var postText = document.getElementById('post-text').value;
post.append(postText);
var card = document.createElement('div');
card.append(post);
var cardStack = document.getElementById('card-stack');
cardStack.prepend(card);
});
#card-stack p {
background: #ddd;
white-space: pre-wrap;
}
textarea {
width: 100%;
}
<textarea id="post-text" class="form-control" rows="8" placeholder="What's up?" required>Group Schedule:
Tuesday practice @ 5th floor (8pm - 11 pm)
Thursday practice @ 5th floor (8pm - 11 pm)
Sunday practice @ (9pm - 12 am)</textarea><br>
<input type="button" id="post-button" value="Post!">
<div id="card-stack"></div>
Orijinal kodunuz gibi yukarıdaki kod parçasının append()ve kullandığını unutmayın prepend(). Bu yazı itibariyle, bu işlevler hala deneysel olarak kabul edilmektedir ve tüm tarayıcılar tarafından tam olarak desteklenmemektedir. Güvende olmak ve eski tarayıcılarla uyumlu kalmak istiyorsanız, bunları aşağıdaki gibi kolayca değiştirebilirsiniz:
element.append(otherElement)ile değiştirilebilir element.appendChild(otherElement);
element.prepend(otherElement)ile değiştirilebilir element.insertBefore(otherElement, element.firstChild);
element.append(stringOfText)ile değiştirilebilir element.appendChild(document.createTextNode(stringOfText));
element.prepend(stringOfText)ile değiştirilebilir element.insertBefore(document.createTextNode(stringOfText), element.firstChild);
- özel bir durum olarak,
elementboşsa, her ikisi de element.append(stringOfText)ve element.prepend(stringOfText)basitçe ile değiştirilebilir element.textContent = stringOfText.
İşte yukarıdakiyle aynı kod parçacığı, append()veya kullanmadan prepend():
document.getElementById('post-button').addEventListener('click', function () {
var post = document.createElement('p');
var postText = document.getElementById('post-text').value;
post.textContent = postText;
var card = document.createElement('div');
card.appendChild(post);
var cardStack = document.getElementById('card-stack');
cardStack.insertBefore(card, cardStack.firstChild);
});
#card-stack p {
background: #ddd;
white-space: pre-wrap;
}
textarea {
width: 100%;
}
<textarea id="post-text" class="form-control" rows="8" placeholder="What's up?" required>Group Schedule:
Tuesday practice @ 5th floor (8pm - 11 pm)
Thursday practice @ 5th floor (8pm - 11 pm)
Sunday practice @ (9pm - 12 am)</textarea><br>
<input type="button" id="post-button" value="Post!">
<div id="card-stack"></div>
Ps. Bunu gerçekten yapmak istiyorsanız olmadan CSS kullanarak white-spaceözelliğini alternatif bir çözüm ile açıkça metinde herhangi satır karakterlerini değiştirmek şeklinde olur <br>HTML etiketleri. İşin zor kısmı, ince hatalar ve olası güvenlik açıklarından kaçınmak için, bu değişikliği yapmadan önce metindeki herhangi bir HTML meta karakterinden (en azından &ve <) kaçınmanız gerektiğidir.
Muhtemelen bunu yapmanın en basit ve en güvenli yolu, tarayıcının sizin için HTML çıkışını işlemesine izin vermektir, örneğin:
var post = document.createElement('p');
post.textContent = postText;
post.innerHTML = post.innerHTML.replace(/\n/g, '<br>\n');
document.getElementById('post-button').addEventListener('click', function () {
var post = document.createElement('p');
var postText = document.getElementById('post-text').value;
post.textContent = postText;
post.innerHTML = post.innerHTML.replace(/\n/g, '<br>\n');
var card = document.createElement('div');
card.appendChild(post);
var cardStack = document.getElementById('card-stack');
cardStack.insertBefore(card, cardStack.firstChild);
});
#card-stack p {
background: #ddd;
}
textarea {
width: 100%;
}
<textarea id="post-text" class="form-control" rows="8" placeholder="What's up?" required>Group Schedule:
Tuesday practice @ 5th floor (8pm - 11 pm)
Thursday practice @ 5th floor (8pm - 11 pm)
Sunday practice @ (9pm - 12 am)</textarea><br>
<input type="button" id="post-button" value="Post!">
<div id="card-stack"></div>
Bu, satır sonlarını düzeltirken, ardışık beyaz boşlukların HTML oluşturucu tarafından daraltılmasını engellemeyeceğini unutmayın. Metindeki boşlukların bir kısmını bölünemez boşluklarla değiştirerek bunu (bir nevi) taklit etmek mümkündür, ancak dürüst olmak gerekirse, tek bir CSS satırı ile önemsiz bir şekilde çözülebilecek bir şey için bu oldukça karmaşık hale gelmektedir.