জাভাস্ক্রিপ্টের সাথে স্ট্রিং কাটানো এবং শেষের দিকে উপবৃত্ত স্থাপনের জন্য কারও কাছে কি আরও অত্যাধুনিক সমাধান / গ্রন্থাগার রয়েছে: সুস্পষ্ট সমাধানের চেয়ে?
if (string.length > 25) {
string = string.substring(0, 24) + "...";
}
জাভাস্ক্রিপ্টের সাথে স্ট্রিং কাটানো এবং শেষের দিকে উপবৃত্ত স্থাপনের জন্য কারও কাছে কি আরও অত্যাধুনিক সমাধান / গ্রন্থাগার রয়েছে: সুস্পষ্ট সমাধানের চেয়ে?
if (string.length > 25) {
string = string.substring(0, 24) + "...";
}
উত্তর:
মূলত, আপনি প্রদত্ত স্ট্রিংয়ের দৈর্ঘ্য পরীক্ষা করে দেখুন। যদি এটি একটি নির্দিষ্ট দৈর্ঘ্যের চেয়ে দীর্ঘ হয় তবে এটিকে n
দৈর্ঘ্যে n
( substr
বা slice
) …
ক্লিপ করুন এবং ক্লিপযুক্ত স্ট্রিংটিতে এইচটিএমএল সত্তা (…) যুক্ত করুন।
যেমন একটি পদ্ধতি মত দেখাচ্ছে
function truncate(str, n){
return (str.length > n) ? str.substr(0, n-1) + '…' : str;
};
যদি 'আরও পরিশীলিত' দ্বারা আপনি যদি স্ট্রিংয়ের শেষ শব্দের সীমানায় কাটছাঁট করতে চান তবে আপনার একটি অতিরিক্ত চেক প্রয়োজন। প্রথমে আপনি স্ট্রিংটিকে পছন্দসই দৈর্ঘ্যে ক্লিপ করুন, তারপরে আপনি এর ফলাফলটিকে তার শেষ শব্দের সীমানায় ক্লিপ করুন
function truncate( str, n, useWordBoundary ){
if (str.length <= n) { return str; }
const subString = str.substr(0, n-1); // the original check
return (useWordBoundary
? subString.substr(0, subString.lastIndexOf(" "))
: subString) + "…";
};
আপনি String
আপনার ফাংশন সহ নেটিভ প্রোটোটাইপ প্রসারিত করতে পারেন । সেক্ষেত্রে str
প্যারামিটারটি সরিয়ে str
ফাংশনটির মধ্যে দিয়ে প্রতিস্থাপন করা উচিত this
:
String.prototype.truncate = String.prototype.truncate ||
function ( n, useWordBoundary ){
if (this.length <= n) { return this; }
const subString = this.substr(0, n-1); // the original check
return (useWordBoundary
? subString.substr(0, subString.lastIndexOf(" "))
: subString) + "…";
};
আরও কৌতূহলী বিকাশকারীরা আপনাকে দৃ strongly়ভাবে কৃতিত্ব দিতে পারে (" আপনার নিজের অবজেক্টগুলিকে সংশোধন করবেন না "। যদিও এতে আমি আপত্তি করব না)।
String
প্রোটোটাইপটি বাড়ানো ছাড়াই একটি পদ্ধতিকে হ'ল আপনার নিজের সাহায্যকারী অবজেক্টটি তৈরি করুন, এতে আপনি প্রদত্ত (দীর্ঘ) স্ট্রিং এবং এটি কেটে দেওয়ার পূর্বনির্ধারিত পদ্ধতি রয়েছে। নীচের স্নিপেটটি এটি করে।
অবশেষে, আপনি কেবল HTML নোডগুলিতে দীর্ঘ স্ট্রিংগুলি কাটাতে সিএসএস ব্যবহার করতে পারেন। এটি আপনাকে কম নিয়ন্ত্রণ দেয়, তবে এটি কার্যকরী সমাধান হতে পারে।
substr
দৈর্ঘ্য তাই এটি substr(0,n)
প্রথম n
অক্ষরে সীমাবদ্ধ করার পরিবর্তে হওয়া উচিত ।
…
প্রকৃত উপবৃত্ত ( ...
) দিয়ে প্রতিস্থাপন করা । আপনি যদি এপিআই-এর সাথে কথোপকথনের জন্য এটি ব্যবহার করার চেষ্টা করছেন আপনি সেখানে অ-এইচটিএমএল সত্তাটি চাইবেন।
নোট করুন যে এটি কেবল ফায়ারফক্সের জন্য করা দরকার।
অন্যান্য সমস্ত ব্রাউজার একটি সিএসএস সমাধান সমর্থন করে ( সমর্থন সারণী দেখুন ):
p {
white-space: nowrap;
width: 100%; /* IE6 needs any width */
overflow: hidden; /* "overflow" value must be different from visible"*/
-o-text-overflow: ellipsis; /* Opera < 11*/
text-overflow: ellipsis; /* IE, Safari (WebKit), Opera >= 11, FF > 6 */
}
বিড়ম্বনা হ'ল আমি কোড স্নিপেটটি মজিলা এমডিসি থেকে পেয়েছি।
white-space: nowrap;
) কাজ করে। যখন এটি একাধিক লাইনে আসে তখন আপনি জাভাস্ক্রিপ্টে আটকে থাকেন।
Your picture ('some very long picture filename truncated...') has been uploaded.
লোকেরা সিএসএসের পরিবর্তে জাভাস্ক্রিপ্টে এটি করতে চাইতে পারে এমন বৈধ কারণ রয়েছে।
জাভাস্ক্রিপ্টে 8 টি অক্ষর (উপবৃত্ত সহ) কেটে ফেলা:
short = long.replace(/(.{7})..+/, "$1…");
অথবা
short = long.replace(/(.{7})..+/, "$1…");
.replace(/^(.{7}).{2,}/, "$1…");
হয় লোডাসের কাটাকাটি ব্যবহার করুন
_.truncate('hi-diddly-ho there, neighborino');
// → 'hi-diddly-ho there, neighbo…'
বা আন্ডারস্কোর.স্ট্রিং এর কাটা কাটা ।
_('Hello world').truncate(5); => 'Hello...'
এখানে আমার সমাধানটি দেওয়া হয়েছে, যা অন্যান্য পরামর্শের তুলনায় কয়েকটি উন্নতি করেছে:
String.prototype.truncate = function(){
var re = this.match(/^.{0,25}[\S]*/);
var l = re[0].length;
var re = re[0].replace(/\s$/,'');
if(l < this.length)
re = re + "…";
return re;
}
// "This is a short string".truncate();
"This is a short string"
// "Thisstringismuchlongerthan25characters".truncate();
"Thisstringismuchlongerthan25characters"
// "This string is much longer than 25 characters and has spaces".truncate();
"This string is much longer…"
এটা তোলে:
আমি খুঁজে পেয়েছি সেরা ফাংশন। পাঠ্য-উপবৃত্তাকারে ক্রেডিট ।
function textEllipsis(str, maxLength, { side = "end", ellipsis = "..." } = {}) {
if (str.length > maxLength) {
switch (side) {
case "start":
return ellipsis + str.slice(-(maxLength - ellipsis.length));
case "end":
default:
return str.slice(0, maxLength - ellipsis.length) + ellipsis;
}
}
return str;
}
উদাহরণ :
var short = textEllipsis('a very long text', 10);
console.log(short);
// "a very ..."
var short = textEllipsis('a very long text', 10, { side: 'start' });
console.log(short);
// "...ng text"
var short = textEllipsis('a very long text', 10, { textEllipsis: ' END' });
console.log(short);
// "a very END"
('long text to be truncated').replace(/(.{250})..+/, "$1…");
উপরের কোডটি কোনওভাবে ভয়েজস অ্যাপ্লিকেশনে কোনও ধরণের অনুলিপি বা লিখিত পাঠ্যের জন্য কাজ করছে না। সুতরাং আমি লোডাশ কাটাকে ব্যবহার করেছি এবং এটি এখন দুর্দান্ত কাজ করছে।
_.truncate('long text to be truncated', { 'length': 250, 'separator': ' '});
পাঠ্যের কোনও লাইন যদি প্রস্থের প্রস্থের চেয়ে বেশি হয়ে থাকে তবে সমস্ত আধুনিক ব্রাউজারগুলি স্বয়ংক্রিয়ভাবে একটি উপবৃত্ত যোগ করার জন্য একটি সাধারণ সিএসএস সমাধানকে সমর্থন করে:
p {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
(দ্রষ্টব্য যে এর কোনও প্রভাব ফেলতে উপাদানটির প্রস্থটি কোনও উপায়ে সীমিত করা দরকার))
Https://css-tricks.com/snippets/css/truncate-string-with-ellipsis/ এর উপর ভিত্তি করে ।
এটা লক্ষনীয় যে এই পদ্ধতির নেই না অক্ষর সংখ্যার উপর ভিত্তি করে সীমিত। আপনার যদি একাধিক লাইনের পাঠ্যের অনুমতি দেওয়ার দরকার হয় তবে এটিও কাজ করে না ।
text-direction: rtl
এবং ব্যবহারের মাধ্যমে এটি অর্জন করতে পারবেন text-align: left
। ডেভিডওয়ালস.নাম
বেশিরভাগ আধুনিক জাভাস্ক্রিপ্ট ফ্রেমওয়ার্কগুলিতে ( জ্যাকিউরি , প্রোটোটাইপ , ইত্যাদি ...) স্ট্রিংয়ের সাথে এটি পরিচালনা করে এমন একটি ইউটিলিটি ফাংশন রয়েছে।
প্রোটোটাইপের একটি উদাহরণ এখানে:
'Some random text'.truncate(10);
// -> 'Some ra...'
এটি এমন কারও একটির মতো বলে মনে হচ্ছে আপনি চান অন্য কারও সাথে ডিল / রক্ষণাবেক্ষণ করা। আমি আরও কোড লেখার চেয়ে ফ্রেমওয়ার্কটি এটি পরিচালনা করতে চাই।
truncate()
- আপনার হয়তো বাড়ানো দরকার যেমন আন্ডারস্কোর স্ট্রিং ।
_.trunc
যা ঠিক এটি করে।
সম্ভবত আমি কোনও উদাহরণ নষ্ট করেছি যেখানে কেউ নালগুলি পরিচালনা করছে, তবে আমার শূন্য হওয়াতে 3 টি শীর্ষ উত্তর আমার পক্ষে কাজ করে নি (অবশ্যই আমি বুঝতে পারি যে ত্রুটি পরিচালনা করা এবং মিলিয়ন অন্যান্য বিষয় এই প্রশ্নের উত্তর দেওয়া ব্যক্তির দায়িত্ব নয়, তবে আমি ভাবলাম যে আমি এটি অন্যদের জন্য সরবরাহ করব এমন একটি চমত্কার উপবৃত্ত উত্তর সহ একটি বিদ্যমান ফাংশন ব্যবহার করেছি।
যেমন
জাভাস্ক্রিপ্ট:
news.comments
কাটা ফাংশন ব্যবহার করে
news.comments.trunc(20, true);
যাইহোক, নিউজ ডটকমের মন্তব্যগুলি শূন্য হওয়ার কারণে এটি "ব্রেক" হবে
চূড়ান্ত
checkNull(news.comments).trunc(20, true)
ট্র্যাক ফাংশন সৌজন্যে কোইঙ্ক
String.prototype.trunc =
function (n, useWordBoundary) {
console.log(this);
var isTooLong = this.length > n,
s_ = isTooLong ? this.substr(0, n - 1) : this;
s_ = (useWordBoundary && isTooLong) ? s_.substr(0, s_.lastIndexOf(' ')) : s_;
return isTooLong ? s_ + '…' : s_;
};
আমার সাধারণ নাল চেকার (আক্ষরিক "নাল" জিনিসগুলির জন্য চেকও করে (এটি ক্যাড অপরিবর্তিত, "", নাল, "নাল", ইত্যাদি ..)
function checkNull(val) {
if (val) {
if (val === "null") {
return "";
} else {
return val;
}
} else {
return "";
}
}
কখনও কখনও ফাইলের নামগুলি নম্বরযুক্ত হয়, যেখানে সূচকটি শুরুতে বা শেষে হতে পারে at সুতরাং আমি স্ট্রিংয়ের কেন্দ্র থেকে ছোট করতে চেয়েছি:
function stringTruncateFromCenter(str, maxLength) {
const midChar = "…"; // character to insert into the center of the result
var left, right;
if (str.length <= maxLength) return str;
// length of beginning part
left = Math.ceil(maxLength / 2);
// start index of ending part
right = str.length - Math.floor(maxLength / 2) + 1;
return str.substr(0, left) + midChar + str.substring(right);
}
সচেতন থাকুন যে আমি ইউটিএফ -8 এ 1 বাইটের বেশি সহ এখানে একটি ফিল ফিল্টার ব্যবহার করেছি।
আপনি Ext.util . Format.ellipsis ফাংশনটি ব্যবহার করতে পারেন যদি আপনি Ext.js ব্যবহার করেন
আমি কোল্যাঙ্কের সমাধানটিকে অগ্রাহ্য করেছি। সত্যিই দুর্দান্ত কমপ্যাক্ট সমাধান। একটি ছোট প্রান্তের কেস রয়েছে যা আমি সম্বোধন করতে চাই। যদি কেউ যে কোনও কারণে সত্যই দীর্ঘ চরিত্রের অনুক্রমে প্রবেশ করে তবে তা কেটে যাবে না:
function truncate(str, n, useWordBoundary) {
var singular, tooLong = str.length > n;
useWordBoundary = useWordBoundary || true;
// Edge case where someone enters a ridiculously long string.
str = tooLong ? str.substr(0, n-1) : str;
singular = (str.search(/\s/) === -1) ? true : false;
if(!singular) {
str = useWordBoundary && tooLong ? str.substr(0, str.lastIndexOf(' ')) : str;
}
return tooLong ? str + '…' : str;
}
একটি দ্রুত Googling আমি পেয়েছি, এই আপনার জন্য যে কাজ ... করে?
/**
* Truncate a string to the given length, breaking at word boundaries and adding an elipsis
* @param string str String to be truncated
* @param integer limit Max length of the string
* @return string
*/
var truncate = function (str, limit) {
var bits, i;
if (STR !== typeof str) {
return '';
}
bits = str.split('');
if (bits.length > limit) {
for (i = bits.length - 1; i > -1; --i) {
if (i > limit) {
bits.length = i;
}
else if (' ' === bits[i]) {
bits.length = i;
break;
}
}
bits.push('...');
}
return bits.join('');
};
// END: truncate
পাঠ্য-ওভারফ্লো: উপবৃত্তীয় হ'ল আপনার প্রয়োজনীয় সম্পত্তি। এটি এবং একটি ওভারফ্লো সহ: একটি নির্দিষ্ট প্রস্থের সাথে লুকানো, সবকিছু ছাড়িয়ে যা তিনটি সময়ের শেষে কার্যকর হবে ... সাদা স্থান যোগ করতে ভুলবেন না: নরপ বা পাঠ্যটি একাধিক লাইনে দেওয়া হবে।
.wrap{
text-overflow: ellipsis
white-space: nowrap;
overflow: hidden;
width:"your desired width";
}
<p class="wrap">The string to be cut</p>
সি_হর্মের উত্তর আমার মতে সেরা। আপনি যদি ব্যবহার করতে চান দয়া করে নোট করুন
"My string".truncate(n)
আপনাকে আক্ষরিক পরিবর্তে একটি রেজিপ্সপ অবজেক্ট কনস্ট্রাক্টর ব্যবহার করতে হবে। \S
এটিকে রূপান্তর করার সময় আপনাকে পালাতে হবে।
String.prototype.truncate =
function(n){
var p = new RegExp("^.{0," + n + "}[\\S]*", 'g');
var re = this.match(p);
var l = re[0].length;
var re = re[0].replace(/\s$/,'');
if (l < this.length) return re + '…';
};
কোলঙ্কের সমাধান সংশোধন করা হচ্ছে:
String.prototype.trunc = String.prototype.trunc ||
function(n){
return this.length>n ? this.substr(0,n-1)+'…' : this.toString();
};
এটি স্ট্রিং অবজেক্টের পরিবর্তে স্ট্রিংয়ের মান প্রদান করে যদি এটি কাটার প্রয়োজন হয় না।
আমি সম্প্রতি এটি করতে হয়েছিল এবং এর সাথে শেষ করেছিলাম:
/**
* Truncate a string over a given length and add ellipsis if necessary
* @param {string} str - string to be truncated
* @param {integer} limit - max length of the string before truncating
* @return {string} truncated string
*/
function truncate(str, limit) {
return (str.length < limit) ? str : str.substring(0, limit).replace(/\w{3}$/gi, '...');
}
আমার কাছে সুন্দর এবং পরিষ্কার মনে হচ্ছে :)
আমি .স্লাইস () ব্যবহার করতে পছন্দ করি প্রথম যুক্তিটি সূচনা সূচক এবং দ্বিতীয়টি শেষ সূচক the এর মধ্যে থাকা সমস্ত কিছু যা আপনি ফিরে পাবেন।
var long = "hello there! Good day to ya."
// hello there! Good day to ya.
var short = long.slice(0, 5)
// hello
কোথাও স্মার্ট: ডি
//My Huge Huge String
let tooHugeToHandle = `It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).`
//Trim Max Length
const maxValue = 50
// The barber.
const TrimMyString = (string, maxLength, start = 0) => {
//Note - `start` is if I want to start after some point of the string
if (string.length > maxLength) {
let trimmedString = string.substr(start, maxLength)
return (
trimmedString.substr(
start,
Math.min(trimmedString.length, trimmedString.lastIndexOf(' '))
) + ' ...'
)
}
return string
}
console.log(TrimMyString(tooHugeToHandle, maxValue))