सबसे आसान उपाय यह है कि जिस तत्व को आप पाठ में सम्मिलित कर रहे हैं उसे निम्नलिखित सीएसएस संपत्ति के साथ शैली दें:
white-space: pre-wrap;
यह गुण मैचिंग तत्वों के भीतर व्हाट्सएप और न्यूलाइन को उसी तरह से व्यवहार करता है जैसे कि अंदर<textarea> । यही है, लगातार व्हॉट्सएप का पतन नहीं हुआ है, और लाइनें स्पष्ट रूप से नई रेखाओं पर टूटी हुई हैं (लेकिन तत्व की चौड़ाई से अधिक होने पर स्वचालित रूप से लपेटी जाती हैं)।
यह देखते हुए कि अब तक यहां पोस्ट किए गए उत्तरों में से कई HTML इंजेक्शन के लिए असुरक्षित हैं (उदाहरण के लिए, क्योंकि वे बिना इनपुट उपयोगकर्ता को असाइन करते हैं innerHTML) या अन्यथा छोटी गाड़ी है, मुझे अपने मूल कोड के आधार पर यह सुरक्षित और सही तरीके से करने का एक उदाहरण देता हूं:
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>
ध्यान दें, अपने मूल कोड की तरह, ऊपर स्निपेट उपयोग करता है append()और prepend()। इस लेखन के रूप में, उन कार्यों को अभी भी प्रयोगात्मक माना जाता है और सभी ब्राउज़रों द्वारा पूरी तरह से समर्थित नहीं है। यदि आप सुरक्षित रहना चाहते हैं और पुराने ब्राउज़रों के साथ संगत रहना चाहते हैं, तो आप उन्हें निम्न प्रकार से आसानी से स्थानापन्न कर सकते हैं:
element.append(otherElement)के साथ प्रतिस्थापित किया जा सकता है element.appendChild(otherElement);
element.prepend(otherElement)के साथ प्रतिस्थापित किया जा सकता है element.insertBefore(otherElement, element.firstChild);
element.append(stringOfText)के साथ प्रतिस्थापित किया जा सकता है element.appendChild(document.createTextNode(stringOfText));
element.prepend(stringOfText)के साथ प्रतिस्थापित किया जा सकता है element.insertBefore(document.createTextNode(stringOfText), element.firstChild);
- विशेष मामले के रूप में, यदि
elementखाली है, दोनों element.append(stringOfText)और element.prepend(stringOfText)बस के साथ बदला जा सकता है element.textContent = stringOfText।
यहाँ ऊपर के समान स्निपेट है, लेकिन बिना उपयोग append()या 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। यदि आप सीएसएस संपत्ति का उपयोग किए बिना वास्तव में ऐसा करना चाहते white-spaceहैं, तो एक वैकल्पिक समाधान स्पष्ट रूप से <br>HTML टैग्स के साथ पाठ में किसी भी नए वर्ण को बदलना होगा । मुश्किल हिस्सा यह है कि, सूक्ष्म कीड़े और संभावित सुरक्षा छिद्रों को शुरू करने से बचने के लिए, आपको पाठ में किसी भी HTML मेटाचैकर्स (न्यूनतम &और कम से कम <) से बचना होगा। पहले इस प्रतिस्थापन को करने ।
संभवत: ऐसा करने का सबसे सरल और सुरक्षित तरीका है कि ब्राउज़र को आपके लिए HTML-भागने से बचाए, जैसे:
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>
ध्यान दें, जबकि यह लाइन ब्रेक को ठीक कर देगा, यह HTML व्हाट्सएप द्वारा लगातार व्हाट्सएप को गिरने से नहीं रोकेगा। यह संभव है कि (तरह) अनुकरण करें कि पाठ में कुछ व्हाट्सएप को गैर-ब्रेकिंग स्पेस के साथ बदल दिया जाए, लेकिन ईमानदारी से, यह कुछ ऐसी चीज़ों के लिए जटिल हो रहा है जो सीएसएस की एक पंक्ति के साथ तुच्छ रूप से हल हो सकती हैं।