क्या किसी के पास जावास्क्रिप्ट के साथ तार काटकर और अंत में एक दीर्घवृत्त डालने के लिए एक अधिक परिष्कृत समाधान / पुस्तकालय है, जो स्पष्ट है:
if (string.length > 25) {
string = string.substring(0, 24) + "...";
}
क्या किसी के पास जावास्क्रिप्ट के साथ तार काटकर और अंत में एक दीर्घवृत्त डालने के लिए एक अधिक परिष्कृत समाधान / पुस्तकालय है, जो स्पष्ट है:
if (string.length > 25) {
string = string.substring(0, 24) + "...";
}
जवाबों:
अनिवार्य रूप से, आप दिए गए स्ट्रिंग की लंबाई की जांच करते हैं। यदि यह दी गई लंबाई से अधिक लंबा है n
, तो इसे लंबाई n
( substr
या slice
) पर क्लिप …
करें और क्लिप की गई स्ट्रिंग में html एंटिटी (…) जोड़ें ।
ऐसा तरीका दिखता है
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) + "…";
};
अधिक हठधर्मिता करने वाले डेवलपर्स आपको इस पर दृढ़ता से पकड़ सकते हैं ("उन वस्तुओं को संशोधित न करें जो आपके पास नहीं हैं "। मुझे हालांकि बुरा नहीं लगेगा)।
String
प्रोटोटाइप का विस्तार किए बिना एक दृष्टिकोण अपनी सहायक वस्तु बनाने के लिए है, जिसमें आपके द्वारा प्रदान की जाने वाली (लंबी) स्ट्रिंग और इसे कम करने के लिए पूर्व-निर्धारित विधि है। यही नीचे स्निपेट करता है।
अंत में, आप HTML नोड्स में लंबे स्ट्रिंग्स को छोटा करने के लिए केवल css का उपयोग कर सकते हैं। यह आपको कम नियंत्रण देता है, लेकिन अच्छी तरह से व्यवहार्य समाधान हो सकता है।
substr
एक लंबाई है इसलिए इसे substr(0,n)
पहले n
वर्णों तक सीमित करने के बजाय होना चाहिए ।
…
वास्तविक दीर्घवृत्त ( ...
) के साथ बदल रही है । यदि आप API के साथ सहभागिता के लिए इसका उपयोग करने का प्रयास कर रहे हैं, तो आप वहां गैर-HTML इकाई चाहते हैं।
ध्यान दें कि यह केवल फ़ायरफ़ॉक्स के लिए किया जाना चाहिए।
अन्य सभी ब्राउज़र सीएसएस समाधान का समर्थन करते हैं ( समर्थन तालिका देखें ):
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...'
('long text to be truncated').replace(/(.{250})..+/, "$1…");
किसी तरह उपरोक्त कोड किसी प्रकार की कॉपी पेस्ट या लिखित पाठ के लिए vuejs ऐप में काम नहीं कर रहा था। इसलिए मैंने लॉश ट्रंकट का उपयोग किया और इसके अब ठीक काम कर रहा था।
_.truncate('long text to be truncated', { 'length': 250, 'separator': ' '});
यहाँ मेरा समाधान है, जिसमें अन्य सुझावों पर कुछ सुधार है:
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"
यदि पाठ की एक पंक्ति उपलब्ध चौड़ाई से अधिक है, तो सभी आधुनिक ब्राउज़र अब स्वचालित रूप से एक दीर्घवृत्त जोड़ने के लिए एक सरल सीएसएस समाधान का समर्थन करते हैं:
p {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
(ध्यान दें कि इसके लिए किसी भी तरह से प्रभाव डालने के लिए तत्व की चौड़ाई को किसी तरह से सीमित करने की आवश्यकता होती है।)
Https://css-tricks.com/snippets/css/truncate-string-with-ellips// के आधार पर ।
यह ध्यान दिया जाना चाहिए कि यह दृष्टिकोण वर्णों की संख्या के आधार पर सीमित नहीं है। पाठ की कई पंक्तियों को अनुमति देने के लिए भी यह काम नहीं करता है ।
text-direction: rtl
और पूरा कर सकते हैं text-align: left
। देखें davidwalsh.name/css-ellipsis-left
अधिकांश आधुनिक जावास्क्रिप्ट फ्रेमवर्क ( JQuery , प्रोटोटाइप , आदि ...) एक उपयोगिता फ़ंक्शन है जो स्ट्रिंग को संभालता है जो इसे संभालता है।
यहाँ प्रोटोटाइप में एक उदाहरण दिया गया है:
'Some random text'.truncate(10);
// -> 'Some ra...'
ऐसा लगता है कि उन कार्यों में से एक है जो आप चाहते हैं कि कोई अन्य व्यक्ति इससे निपटे / बनाए रखे। मैंने अधिक कोड लिखने के बजाय फ्रेमवर्क को इसे संभालने दिया।
truncate()
या तो नहीं लगता है - आपको अंडरस्कोर।स्ट्रिंग जैसे एक्सटेंशन की आवश्यकता हो सकती है ।
_.trunc
ऐसा होता है।
शायद मुझे एक उदाहरण याद आया कि कोई व्यक्ति नल को कैसे संभाल रहा है, लेकिन 3 शीर्ष उत्तर मेरे लिए काम नहीं करते थे जब मेरे पास नल थे (निश्चित रूप से मुझे पता है कि त्रुटि से निपटने और मिलियन अन्य चीजें सवाल का जवाब देने वाले व्यक्ति की जिम्मेदारी नहीं है, लेकिन तब से मैंने एक मौजूदा फ़ंक्शन का उपयोग किया था, साथ ही एक उत्कृष्ट ट्रंकेशन इलिप्सिस के उत्तर के साथ मैंने सोचा था कि मैं इसे दूसरों के लिए प्रदान करूंगा।
जैसे
जावास्क्रिप्ट:
news.comments
ट्रंकेशन फ़ंक्शन का उपयोग करना
news.comments.trunc(20, true);
हालाँकि, news.comments पर अशक्त है यह "टूट जाएगा"
अंतिम
checkNull(news.comments).trunc(20, true)
KooiInc के ट्रंक समारोह शिष्टाचार
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 "";
}
}
कभी-कभी फ़ाइल नाम गिने जाते हैं, जहां सूचकांक शुरुआत या अंत में हो सकता है। इसलिए मैं स्ट्रिंग के केंद्र से छोटा करना चाहता था:
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);
}
ज्ञात हो कि मैंने UTF-8 में 1 से अधिक बाइट के साथ एक भरण पात्र का उपयोग किया था।
यदि आप Ext.js. का उपयोग कर रहे हैं तो आप Ext.util.Format.ellipsis फ़ंक्शन का उपयोग कर सकते हैं
मैंने कोइलनक के समाधान को उकसाया। वास्तव में अच्छा कॉम्पैक्ट समाधान। एक छोटा सा किनारा मामला है जिसे मैं संबोधित करना चाहूंगा। यदि कोई किसी भी कारण से वास्तव में लंबे चरित्र अनुक्रम में प्रवेश करता है, तो वह छोटा नहीं होगा:
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>
c_harm का जवाब मेरी राय में सबसे अच्छा है। कृपया ध्यान दें कि यदि आप उपयोग करना चाहते हैं
"My string".truncate(n)
आपको एक शाब्दिक के बजाय एक regexp ऑब्जेक्ट कंस्ट्रक्टर का उपयोग करना होगा। साथ ही आपको इसे \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, '...');
}
मुझे अच्छा और साफ लगता है :)
मुझे .slice () का उपयोग करना पसंद है। पहला तर्क शुरुआती सूचकांक है और दूसरा समाप्त होने वाला सूचकांक है। बीच में सब कुछ है जो आपको वापस मिलता है।
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))
यह फ़ंक्शन ट्रंककेट स्थान और शब्द भागों को भी करता है। (उदा: मदर इन मोथ ...)
String.prototype.truc= function (length) {
return this.length>length ? this.substring(0, length) + '…' : this;
};
उपयोग:
"this is long length text".trunc(10);
"1234567890".trunc(5);
उत्पादन:
यह लो है ...
12345 ...