আমি jQuery করছি কিছু টেক্সটরিয়া সামগ্রী নিয়ে এবং এটি একটি লি মধ্যে sertোকান।
আমি এটি দৃশ্যত লাইন বিরতি ধরে রাখতে চান।
এটি করার সত্যিই একটি সহজ উপায় থাকতে হবে ...
আমি jQuery করছি কিছু টেক্সটরিয়া সামগ্রী নিয়ে এবং এটি একটি লি মধ্যে sertোকান।
আমি এটি দৃশ্যত লাইন বিরতি ধরে রাখতে চান।
এটি করার সত্যিই একটি সহজ উপায় থাকতে হবে ...
উত্তর:
ডেমো: http://so.devilmaycode.it/jquery-convert-line-breaks-to-br-nl2br- অভিজ্ঞ
function nl2br (str, is_xhtml) {
var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';
return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1'+ breakTag +'$2');
}
আপনি সহজভাবে করতে পারেন:
textAreaContent=textAreaContent.replace(/\n/g,"<br>");
সামগ্রী পরিবর্তন করার পরিবর্তে রেন্ডারিং পরিবর্তন করার চেতনায় , নিম্নলিখিত সিএসএস প্রতিটি নিউলাইনকে এর মতো আচরণ করে :<br>
white-space: pre;
white-space: pre-line;
কেন দুটি নিয়ম: pre-line
কেবল নিউলাইনগুলি প্রভাবিত করে (ক্লুটির জন্য ধন্যবাদ, @ কেভিনপৌলি)। আই 6-- এবং অন্যান্য পুরাতন ব্রাউজারগুলি আরও চূড়ান্ত দিকে ফিরে যায় pre
যার মধ্যে nowrap
একাধিক স্পেস অন্তর্ভুক্ত থাকে এবং রেন্ডার হয়। মোজিলা এবং সিএসএস-ট্রিকগুলিতে এইগুলি এবং অন্যান্য সেটিংস ( pre-wrap
) এর বিশদ (ধন্যবাদ @ সাবেলফোস্টে)।
আমি সাধারণত প্রশ্নের উত্তর না দিয়ে দ্বিতীয়-অনুমানের জন্য এসও প্রিলিফিকেশনটির বিরুদ্ধে থাকি , এই ক্ষেত্রে <br>
মার্কআপের সাথে নিউলাইনগুলি প্রতিস্থাপন করা ধোয়া না দেওয়া ব্যবহারকারীর ইনপুট দিয়ে ইনজেকশন আক্রমণের ঝুঁকি বাড়িয়ে তুলতে পারে । আপনি যখনই নিজেকে .text()
কলগুলি পরিবর্তন .html()
করতে দেখেন যাতে আক্ষরিক প্রশ্নটি ইঙ্গিত দেয় তখন আপনি একটি উজ্জ্বল লাল রেখাটি অতিক্রম করছেন । (এই পয়েন্টটি হাইলাইট করার জন্য আপনাকে ধন্যবাদ @ অ্যালেক্সস।) আপনি যদি কোনও সুরক্ষা ঝুঁকির বিষয়টি অস্বীকার করেন, ভবিষ্যতের পরিবর্তনগুলি অজান্তেই এটি প্রবর্তন করতে পারে। পরিবর্তে, এই সিএসএস আপনাকে নিরাপদ ব্যবহার করে মার্কআপ ছাড়াই হার্ড লাইন বিরতি পেতে দেয় .text()
।
.html()
সামগ্রীটি সেট করার জন্য ব্যবহারের প্রয়োজন হবে , যার ফলে ব্যবহারকারীরা নির্বিচারে এইচটিএমএল সন্নিবেশ করতে দেয় আপনি যদি আগে থেকে এটি ফিল্টার না করেন।
.html()
বিপদ সম্পর্কে ভাল পয়েন্ট @ অ্যালেক্সস, অন্তর্ভুক্ত করার চেষ্টা করেছেন।
সমাধান
এই কোড ব্যবহার করুন
jQuery.nl2br = function(varTest){
return varTest.replace(/(\r\n|\n\r|\r|\n)/g, "<br>");
};
এই জাভাস্ক্রিপ্ট ফাংশনটি অদলবদল পরিচালনা করতে sertোকানো বা প্রতিস্থাপন করা উচিত কিনা তা বিবেচনা করে।
(এইচটিএমএল লাইন ব্রেকগুলি সন্নিবেশ করুন বা প্রতিস্থাপন করুন)
/**
* This function is same as PHP's nl2br() with default parameters.
*
* @param {string} str Input text
* @param {boolean} replaceMode Use replace instead of insert
* @param {boolean} isXhtml Use XHTML
* @return {string} Filtered text
*/
function nl2br (str, replaceMode, isXhtml) {
var breakTag = (isXhtml) ? '<br />' : '<br>';
var replaceStr = (replaceMode) ? '$1'+ breakTag : '$1'+ breakTag +'$2';
return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, replaceStr);
}
আমি এর জন্য একটু jQuery এক্সটেনশন লিখেছি:
$.fn.nl2brText = function (sText) {
var bReturnValue = 'undefined' == typeof sText;
if(bReturnValue) {
sText = $('<pre>').html(this.html().replace(/<br[^>]*>/i, '\n')).text();
}
var aElms = [];
sText.split(/\r\n|\r|\n/).forEach(function(sSubstring) {
if(aElms.length) {
aElms.push(document.createElement('br'));
}
aElms.push(document.createTextNode(sSubstring));
});
var $aElms = $(aElms);
if(bReturnValue) {
return $aElms;
}
return this.empty().append($aElms);
};
ডিওএম- এ টেক্সারিয়া থেকে পাঠ্য সন্নিবেশ করার আরেকটি উপায় লাইন বিরতি রেখে Node.innerText বৈশিষ্ট্যটি ব্যবহার করা যা কোনও নোড এবং এর বংশধরদের রেন্ডার করা টেক্সট সামগ্রী উপস্থাপন করে ।
গিটার হিসাবে, এটি কার্সারের সাহায্যে উপাদানগুলির বিষয়বস্তু হাইলাইট করে এবং ক্লিপবোর্ডে অনুলিপি করা হয় তবে ব্যবহারকারীরা যে পাঠ্যটি পাবেন তা সন্নিহিত করে।
সম্পত্তিটি 2016 সালে প্রমিত হয়ে উঠল এবং আধুনিক ব্রাউজারগুলি দ্বারা এটি সমর্থনযোগ্য। আমি কি ব্যবহার করতে পারি : আমি যখন এই উত্তরটি পোস্ট করি তখন 97% গ্লোবাল কভারেজ।