একটি স্ট্রিং সোজা জাভাস্ক্রিপ্ট কেটে দিন


166

আমি সরাসরি জাভাস্ক্রিপ্ট ব্যবহার করে একটি গতিশীল লোড স্ট্রিং ছাঁটাই করতে চাই। এটি একটি ইউআরএল, সুতরাং কোনও স্পেস নেই এবং আমি স্পষ্টতই শব্দের সীমানা, কেবল অক্ষর সম্পর্কে চিন্তা করি না।

আমি যা পেয়েছি তা এখানে:

var pathname = document.referrer; //wont work if accessing file:// paths
document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"

1
আপনি কোন অংশটি কাটাতে চান? আপনার উদাহরণটি উদ্দেশ্যটিকে খুব ভালভাবে প্রকাশ করে না।
লার্সেনাল

1
ওহ- ঠিক আছে - আমি একটি নির্দিষ্ট পরিমাণে অক্ষরে ইউআরএল কেটে দিতে চাই, যাতে আমি যখন "foo" এর অন্তর্নিহিত এইচটিএমএল সেট করি তখন এটি ডিভের বাইরে চলে না যায় যদি এটি খুব দীর্ঘ হয়।
বব

1
* তবে- কেবল অন্তর্নিহিত এইচটিএমএল, ভেরিপথের নামটি নয়।
বব

1
ডিভের ওভারফ্লো লুকানোর জন্য শুধু সিএসএস ব্যবহার করবেন না কেন? উপচে পড়া: লুকানো
স্যামুয়েল

2
@ সামুয়েল যেহেতু এটি ইউআই-ভিত্তিক অনুশীলন হবে- যদি ব্যবহারকারী কেবলমাত্র ইউআরএলটি (ডকুমেন্ট.আরফারার) থেকে এসেছিলেন তা দেখার প্রত্যাশা করে এবং আমি এটি সংক্ষিপ্ত করে দিচ্ছি, তবে আমি তাদেরকে বোঝাতে চাই যে তারা কেবল একটি অংশ দেখছে ইউআরএলটির, এবং কোনও ত্রুটি ছিল না। এটি বাদ দিয়ে, আপনি যে পদ্ধতিটির প্রস্তাব দিচ্ছেন তাতে অক্ষরগুলি অর্ধেক কেটে যাবে যা ভয়ঙ্কর দেখাবে।
বব

উত্তর:


333

সাবস্ট্রিং পদ্ধতিটি ব্যবহার করুন :

var length = 3;
var myString = "ABCDEFG";
var myTruncatedString = myString.substring(0,length);
// The value of myTruncatedString is "ABC"

সুতরাং আপনার ক্ষেত্রে:

var length = 3;  // set to the number of characters you want to keep
var pathname = document.referrer;
var trimmedPathname = pathname.substring(0, Math.min(length,pathname.length));

document.getElementById("foo").innerHTML =
     "<a href='" + pathname +"'>" + trimmedPathname + "</a>"

1
আপনি যদি 0 থেকে শুরু করে একটি স্ট্রিং চান, তবে সাবস্ট্রাস্ট ফাংশন 3 টি কম চর দিয়ে ঠিক একই জিনিসটি করবে;)
জ্যাকোকনর

1
সাবস্ট্রাস্ট অদ্ভুত আচরণ করুন যদি স্ট্রিংটি এর চেয়ে কম হয় length- খালি ফিরে আসে
রোজা

আপনার "স্ট্রিং" যদি একটি নম্বর হয় তবে আপনাকে .toString().এটিকে স্ট্রিংতে রূপান্তর করতে সন্নিবেশ করতে হবে যা substring()হ্যান্ডেল করতে পারে।
not2qubit


16

হ্যাঁ, সাবস্ট্রিং আপনার ম্যাথ.মিন করার দরকার নেই; মূল দৈর্ঘ্যে স্ট্রিংয়ের দৈর্ঘ্যের চেয়ে লম্বা সূচক সহ স্ট্রেরিং।

কিন্ত!

document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"

এটি একটি ভুল. যদি ডকুমেন্ট.রেফারারের অ্যাস্টোস্ট্রোফ থাকে? বা এইচটিএমএল এর বিশেষ অর্থ রয়েছে এমন অন্যান্য বিভিন্ন অক্ষর। সবচেয়ে খারাপ ক্ষেত্রে, রেফারারের আক্রমণকারী কোডটি আপনার পৃষ্ঠায় জাভাস্ক্রিপ্ট ইনজেক্ট করতে পারে, এটি একটি এক্সএসএস সুরক্ষা গর্ত।

এই ঘটনাকে থামানোর জন্য ম্যানুয়ালি পাথনামে থাকা অক্ষরগুলি থেকে পালানো সম্ভব হলেও এটি কিছুটা ব্যথার। অভ্যন্তরীণ এইচটিএমএল স্ট্রিংগুলির সাথে ফিডিংয়ের চেয়ে আপনি ডিওএম পদ্ধতি ব্যবহার করা ভাল।

if (document.referrer) {
    var trimmed= document.referrer.substring(0, 64);
    var link= document.createElement('a');
    link.href= document.referrer;
    link.appendChild(document.createTextNode(trimmed));
    document.getElementById('foo').appendChild(link);
}

আমি বিভ্রান্ত, আপনার সমাধান কীভাবে সুরক্ষা গর্ত এড়াতে পারে?
বব

10
আপনি যখন 'ক্রিয়েটেক্সটনড' এবং '.href = ...' এর মতো ডোম পদ্ধতি ব্যবহার করেন, আপনি সরাসরি আসল অন্তর্নিহিত প্লেইনেক্সট মানটি সেট করে যাচ্ছেন। আপনি যখন এইচটিএমএল লিখছেন, কোনও এইচটিএমএল ফাইলে বা অভ্যন্তরীণ এইচটিএমএল এর মাধ্যমে, আপনাকে অবশ্যই HTML পালানোর নিয়ম মানতে হবে। সুতরাং 'createTextNode (' A <B&C ')' ঠিক আছে, অভ্যন্তরীণ এইচটিএমএল দিয়ে আপনাকে বলতে হবে 'অভ্যন্তরীণ এইচটিএমএল =' এ & lt; বি & amp; সি ''।
বোবিন্স

11

ভেবেছিলাম আমি সুগার.জেসকে একটি উল্লেখ করব। এটি একটি ছাঁটাই পদ্ধতি যা দুর্দান্ত স্মার্ট।

ডকুমেন্টেশন থেকে :

একটি স্ট্রিং কেটে দেয়। বিভাজনটি সত্য না হলে, কাটা শব্দের বিভক্ত হবে না এবং পরিবর্তে যেখানে কাটা হয়েছে সেখানে শব্দটি ফেলে দিন।

উদাহরণ:

'just sittin on the dock of the bay'.truncate(20)

আউটপুট:

just sitting on...

9
Sugar is a Javascript library that extends native objects… জাভাস্ক্রিপ্টে নেটিভ অবজেক্টগুলি প্রসারিত করা সাধারণত একটি খারাপ ধারণা considered হিসাবে বিবেচিত হয় ™
জেজেন টমাস

@ জিজেন থমাস কিছু সময় খারাপ ধারণা সবচেয়ে উপযুক্ত ধারণা।
বিদ্যিতকোঠারী

10

নিম্নলিখিত কোডটি একটি স্ট্রিং কেটে দেয় এবং শব্দগুলিকে আলাদা করবে না এবং পরিবর্তে যেখানে কাটা কাটা হয়েছে সেখানে শব্দটি ফেলে দিন। সুগার.জেএস উত্সের উপর ভিত্তি করে।

function truncateOnWord(str, limit) {
        var trimmable = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u2028\u2029\u3000\uFEFF';
        var reg = new RegExp('(?=[' + trimmable + '])');
        var words = str.split(reg);
        var count = 0;
        return words.filter(function(word) {
            count += word.length;
            return count <= limit;
        }).join('');
    }

2
ফলাফল হিসাবে যদি "" "যুক্ত করা খুব ভাল হয়! == স্ট্রিং;
লিও ক্যাসিরো

9

এখানে একটি পদ্ধতি আপনি ব্যবহার করতে পারেন। এটি ফ্রিকোডক্যাম্প চ্যালেঞ্জগুলির একটির জন্য উত্তর:

function truncateString(str, num) {


if (str.length > num) {
return str.slice(0, num) + "...";}
 else {
 return str;}}

6

ES6 সংস্করণ আপডেট হয়েছে

const truncateString = (string, maxLength = 50) => {
  if (!string) return null;
  if (string.length <= maxLength) return string;
  return `${string.substring(0, maxLength)}...`;
};

truncateString('what up', 4); // returns 'what...'

এটি সর্বদা সাবস্ট্রিংকে অনুরোধ করে, এমনকি এটি প্রয়োজনীয় নাও হতে পারে ...
ক্লিন্ট ইস্টউড

ক্লিন্টইস্টউড ভাল মন্তব্য, আমি উত্তর আপডেট করেছি। সর্বাধিক দৈর্ঘ্যের তুলনায় স্ট্রিংয়ের দৈর্ঘ্য যাচাই করার অর্থ হ'ল আমি শোডটস কনস্ট এবং টেনারিটি এটিকে আরও সুন্দর করে তুলতে পারি। চিয়ার্স।
স্যাম লোগান

3

হ্যাঁ, substringদুর্দান্ত কাজ করে:

stringTruncate('Hello world', 5); //output "Hello..."
stringTruncate('Hello world', 20);//output "Hello world"

var stringTruncate = function(str, length){
  var dots = str.length > length ? '...' : '';
  return str.substring(0, length)+dots;
};

0

আপনি যদি শব্দ দ্বারা ছাঁটাই করতে চান।

function limit(str, limit, end) {

      limit = (limit)? limit : 100;
      end = (end)? end : '...';
      str = str.split(' ');
      
      if (str.length > limit) {
        var cutTolimit = str.slice(0, limit);
        return cutTolimit.join(' ') + ' ' + end;
      }

      return str.join(' ');
    }

    var limit = limit('ILorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus metus magna, maximus a dictum et, hendrerit ac ligula. Vestibulum massa sapien, venenatis et massa vel, commodo elementum turpis. Nullam cursus, enim in semper luctus, odio turpis dictum lectus', 20);

    console.log(limit);


0

var pa = document.getElementsByTagName('p')[0].innerHTML;
var rpa = document.getElementsByTagName('p')[0];
// console.log(pa.slice(0, 30));
var newPa = pa.slice(0, 29).concat('...');
rpa.textContent = newPa;
console.log(newPa)
<p>
some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here
</p>

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.