ইউআরএল এর শেষ বিভাগ


228

আমি কীভাবে একটি ইউআরএল এর শেষ বিভাগটি পেতে পারি? আমার কাছে নিম্নলিখিত স্ক্রিপ্ট রয়েছে যা ক্লিক করা অ্যাঙ্কর ট্যাগের পুরো url প্রদর্শন করে:

$(".tag_name_goes_here").live('click', function(event)
{
    event.preventDefault();  
    alert($(this).attr("href"));
});

ইউআরএল হলে

http://mywebsite/folder/file

সতর্কতা বাক্সে আমি কীভাবে এটি url এর "ফাইল" অংশটি প্রদর্শন করতে পারি?


নীচে আমার কার্যকরী জাভা স্ক্রিপ্ট সমাধান রয়েছে ope আশা করি এটি সহায়তা করে। stackoverflow.com/a/38370175/610951
রবি শঙ্কর কোটা

উত্তর:


369

এছাড়াও আপনি ব্যবহার করতে পারেন lastIndexOf () শেষ সংঘটন খোজা ফাংশন /আপনার URL- এ চরিত্র, তারপর সাবস্ট্রিং () ফাংশন সাবস্ট্রিং যে অবস্থান থেকে শুরু ফিরতে:

console.log(this.href.substring(this.href.lastIndexOf('/') + 1));

এইভাবে, আপনি আপনার সমস্ত ইউআরএল বিভাগগুলি যুক্ত অ্যারে তৈরি এড়াতে পারবেন split()does


3
@oshirowanen, না, তবে এটি প্রতিটি URL বিভাগ থেকে একটি অ্যারে উপাদান তৈরি করবে। যেহেতু আপনি কেবলমাত্র সর্বশেষ বিভাগে আগ্রহী, তাই আপনি কখনও ব্যবহার করবেন না এমন অনেক অ্যারের উপাদান বরাদ্দ করা অপচয় হতে পারে।
ফ্রেডরিক হামিদি

11
কিন্তু যদি এমন url মতো ছিল admin/store/tour/-1/তাই এটা হতে হবে ''স্ট্রিং?
কিয়ার ওয়া লার

1
পছন্দ করুন
ফ্রেডরিক হামিদি

1
ইউআরএল /শেষে যদি একটি থাকে ?
Sнаđошƒаӽ

6
সংযুক্তি: @ সেট কিয়ার ওয়া লর অগ এবং @ এসнаđошƒаӽ সলিউশনটি ইউআরএলটির জন্য /যা শেষে রয়েছে:var url = window.location.href.replace(/\/$/, ''); /* remove optional end / */ var lastSeg = url.substr(url.lastIndexOf('/') + 1);
রস

151

var parts = 'http://mywebsite/folder/file'.split('/');
var lastSegment = parts.pop() || parts.pop();  // handle potential trailing slash

console.log(lastSegment);


এটি কীভাবে কাজ করে তা আমাকে ব্যাখ্যা করতে পারেন? আমার জ্ঞান অনুযায়ী .pop () অ্যারের শেষ উপাদানটি অপসারণের জন্য ব্যবহৃত হয়েছিল। কিন্তু এখানে কি এটি আমার ইউআরএল এর শেষ উপাদানটি দেখিয়েছে !!
শাহিনকে

1
স্প্লিট আপনার ইউআরএলকে একটি অ্যারে রূপান্তরিত করবে ইউআরএল এর প্রতিটি বিভাগকে '/' দ্বারা সীমাবদ্ধ করে নিবে। সুতরাং শেষ বিভাগটি ইউআরএল এবং পরবর্তীকালে তৈরি অ্যারের উভয়ের শেষ উপাদান।
স্টিফেন

10
ইউআরএল "/" অর্থাত্http://mywebsite/folder/file/
পিটার লুডলো

@ পিটারলড্লো এটি ক্রোমে in 76 এ কাজ করে আপনি কি দয়া করে বিশদভাবে বর্ণনা করতে পারেন
জাইরপ

1
@ পিটারলড্লো এটি কাজ করে কারণ একটি খালি স্ট্রিংটি জেএস অ্যাবস্ট্রাক্টে মিথ্যা তাই সেক্ষেত্রে এটি খালি স্ট্রিংয়ের "" == falseসাথে অ্যারের অংশটি পপ করে
জাইরুপ

84
window.location.pathname.split("/").pop()

2
সহজ এবং সহজ। ধন্যবাদ।
krezaeim

3
নিখুঁত এবং পরিপাটি, দুর্দান্ত
বাবক হাবিবি

1
সুন্দর এবং পরিষ্কার সাড়া
Zarkys সালাস

1
আমি ঠিক এটিই খুঁজছিলাম। প্রতিক্রিয়া-রাউটার-DOM ব্যবহার করে এই পরিষ্কার সমাধান আমি URL- গত ফরোয়ার্ড স্ল্যাশ trailing শেষ অংশ এটি পাওয়া যায় ছিল /console.log(history.location.pathname.split("/").pop()) যদি এর থেকে আরও ভাল উপায় থাকে তবে আমি জানতে চাই! আশা করি এই মন্তব্যটি আপনার উত্তরে আরও বেশি লোককে নিয়ে যেতে পারে। ধন্যবাদ @ ডব্লক ২৪la
ট্রাওলাওয়ার

সিডনোট: ইউআরএলটিতে কোয়েরি প্যারাম সেট করা থাকলে এটি কাজ করে না (উদাঃ .../file?var=value&foo=bar)। এই সমাধানটি আরও শক্তিশালী এবং আধুনিক উপায়ে এই সমস্যাটি সমাধান করে: stackoverflow.com/a/51795122/1123743
সেবাস্তিয়ান বার্থ

30

রেগেক্সের সাথে আরও একটি সমাধান।

var href = location.href;
console.log(href.match(/([^\/]*)\/*$/)[1]);

আমি এটি পছন্দ করি ধন্যবাদ :)।
সলিল শর্মা

18

জাভাস্ক্রিপ্টের স্ট্রিং অবজেক্টের সাথে সম্পর্কিত ফাংশন বিভাজন রয়েছে যা আপনাকে সহায়তা করতে পারে:

var url = "http://mywebsite/folder/file";
var array = url.split('/');

var lastsegment = array[array.length-1];

17

অন্য উত্তরগুলি যদি পাথটি সরল থাকে তবে কেবলমাত্র সরল পথের উপাদান রয়েছে work তবে এটিতে কোয়েরি প্যারামগুলি থাকা অবস্থায় সেগুলি ভেঙে যায়।

আরও শক্তিশালী সমাধান পাওয়ার পরিবর্তে এর জন্য আরও ভাল ইউআরএল অবজেক্ট ব্যবহার করুন। এটি বর্তমান ইউআরএলটির বিশ্লেষণমূলক ব্যাখ্যা:

ইনপুট: const href = 'https://stackoverflow.com/boo?q=foo&s=bar'

const segments = new URL(href).pathname.split('/');
const last = segments.pop() || segments.pop(); // Handle potential trailing slash
console.log(last);

আউটপুট: 'boo'

এটি সমস্ত সাধারণ ব্রাউজারের জন্য কাজ করে। কেবলমাত্র আমাদের মৃতু্য IE এটি সমর্থন করে না (এবং তা করবে না)। IE এর জন্য একটি পলিফিল পাওয়া যায়, যদিও (যদি আপনি কিছুটা যত্ন নিচ্ছেন )।




5

আমি জানি, এটা খুব দেরি হয়ে, কিন্তু অন্যদের জন্য: আমি অত্যন্ত ব্যবহার সুপারিশ ফুঁপি jQuery প্লাগিন । পিআরএল-এর অনুপ্রেরণা হ'ল ইউআরএল '#' দ্বারাও ভাগ করা যায় (উদাহরণ: অ্যাঙ্গুলার.জেএস লিঙ্ক), অর্থাৎ ইউআরএল দেখতে দেখতে দেখতে পারে

    http://test.com/#/about/us/

অথবা

    http://test.com/#sky=blue&grass=green

এবং পিআরএল দিয়ে আপনি সহজেই সিদ্ধান্ত নিতে পারেন (বিভাগ / অংশ) আপনি কোন বিভাগটি পেতে চান।

"ক্লাসিক" শেষ বিভাগে আপনি লিখতে পারেন:

    var url = $.url('http://test.com/dir/index.html?key=value');
    var lastSegment = url.segment().pop(); // index.html

4

কেবল জাভাস্ক্রিপ্ট ব্যবহার করে ফ্রেডেরিকের উত্তর তৈরি করা:

var url = document.URL

window.alert(url.substr(url.lastIndexOf('/') + 1));


3

আপনি যদি বিভাজনটি ব্যবহার করে অতিরিক্ত উপাদান উত্পন্ন করার বিষয়ে উদ্বিগ্ন না হন তবে ট্রেলিং স্ল্যাশের উল্লেখ করা সমস্যাটি ফিল্টারটি পরিচালনা করতে পারে (ধরে নিই ফিল্টারটির জন্য আপনার ব্রাউজার সমর্থন রয়েছে)।

url.split('/').filter(function (s) { return !!s }).pop()

3
// Store original location in loc like: http://test.com/one/ (ending slash)
var loc = location.href; 
// If the last char is a slash trim it, otherwise return the original loc
loc = loc.lastIndexOf('/') == (loc.length -1) ? loc.substr(0,loc.length-1) : loc.substr(0,loc.lastIndexOf('/'));
var targetValue = loc.substr(loc.lastIndexOf('/') + 1);

টার্গেটভ্যালু = এক

যদি আপনার ইউআরএলটি এমন দেখাচ্ছে:

http://test.com/one/

অথবা

http://test.com/one

অথবা

http://test.com/one/index.htm

তারপরে লকের সমাপ্তি দেখতে: http://test.com/one

এখন, যেহেতু আপনি শেষ আইটেমটি চান, তাই মূলত আপনি যে মানটি (টার্গেটভ্যালু) চেয়েছিলেন সেটি লোড করার জন্য পরবর্তী পদক্ষেপটি চালান।

var targetValue = loc.substr(loc.lastIndexOf('/') + 1);

আমি সম্ভবত কিছু মিস করছি, তবে " টেস্টডোনার " লোকের সাথে দেখতে দেখতে শেষ হবে: " টেস্ট ডটকম "। আমি মনে করি এটির মতো হওয়া উচিত: যদি (loc.lastIndexOf ('/') == (loc.length -1)) {লোক = লোক.সুবস্ট্র (0, লোকালাইট-দৈর্ঘ্য -1)} অন্য {varFile = লোক loc সাবস্ট্রাস্ট (লোক.লাইস্ট ইন্ডেক্সঅফ ('/'), লোক.লেন্থ) .indexOf ('।')! = -1; if (isFile) লোক = লোক.সুবস্ট্র (0, লোক.লিস্ট ইন্ডেক্সঅফ ('/')); }
অ্যালান রাকুইন

স্ল্যাশ searchঅথবা এ ব্যর্থ হলে hash
ওয়াল্ফ

3
window.alert(this.pathname.substr(this.pathname.lastIndexOf('/') + 1));

নেটিভ pathnameসম্পত্তিটি ব্যবহার করুন কারণ এটি সহজতম এবং ইতিমধ্যে ব্রাউজার দ্বারা বিশ্লেষণ এবং সমাধান করা হয়েছে। $(this).attr("href")এমন মানগুলি ফিরিয়ে ../..দিতে পারে যা আপনাকে সঠিক ফলাফল দেয় না।

আপনার যদি প্রয়োজন হয় searchএবং hash(যেমন foo?bar#bazথেকে http://quux.com/path/to/foo?bar#baz) এটি ব্যবহার করুন:

window.alert(this.pathname.substr(this.pathname.lastIndexOf('/') + 1) + this.search + this.hash);

সেই pathnameস্ট্রিপগুলি কোয়েরি প্যারামিটারগুলি যুক্ত করতে চান তবে hrefতা হয় না।
ম্যাক্স হাইবার

3

আপনার বর্তমান উইন্ডোর শেষ বিভাগটি পেতে:

window.location.href.substr(window.location.href.lastIndexOf('/') +1)


3

ট্রেলিং স্ল্যাশ নির্বিশেষে শেষ বিভাগটি প্রদান করে:

var val = 'http://mywebsite/folder/file//'.split('/').filter(Boolean).pop();

console.log(val);


আপনি সম্ভবত path.sepআক্ষরিক স্ল্যাশ না ব্যবহার করতে চান । Nodejs.org/api/path.html#path_path_sep দেখুন । এটি আপনার কোডকে ওএস জুড়ে বহনযোগ্য রাখবে।
অ্যারন

1
দুর্দান্ত ধারণা, তবে এটি আর ব্রাউজারে কাজ করবে না
জন দোহার্টি

ভাল যুক্তি. আমার বলা উচিত এটি কমান্ড লাইন স্ক্রিপ্ট / সার্ভার-সাইড নোডেজগুলিতে পছন্দসই।
অ্যারন


2

প্রথমে / শেষে থাকলে আপনি প্রথমে সরিয়ে ফেলতে পারবেন এবং তারপরে ইউআরএল এর শেষ অংশটি পাবেন

let locationLastPart = window.location.pathname
if (locationLastPart.substring(locationLastPart.length-1) == "/") {
  locationLastPart = locationLastPart.substring(0, locationLastPart.length-1);
}
locationLastPart = locationLastPart.substr(locationLastPart.lastIndexOf('/') + 1);

1

রেডদেবসের উত্তর আপডেট হয়েছে:

var loc = window.location.href;
loc = loc.lastIndexOf('/') == loc.length - 1 ? loc.substr(0, loc.length - 1) : loc.substr(0, loc.length + 1);
var targetValue = loc.substr(loc.lastIndexOf('/') + 1);

Url এর শেষ পাথটি স্ট্রিং হিসাবে মুদ্রণ করে:

test.com/path-name = path-name

test.com/path-name/ = path-name

0

আমি বিশ্বাস করি সাবস্ট্রিংয়ের আগে লেজ স্ল্যাশ ('/') অপসারণ করা আরও নিরাপদ। কারণ আমার দৃশ্যে আমি একটি খালি স্ট্রিং পেয়েছি।

window.alert((window.location.pathname).replace(/\/$/, "").substr((window.location.pathname.replace(/\/$/, "")).lastIndexOf('/') + 1));

0

আমি রেজেক্স এবং বিভক্ত ব্যবহার করছি:

var last_path = location.href.match (/। / (( [\ w])) /) [1] .স্প্লিট ("#") [0] .স্প্লিট ("?") [0]

শেষ পর্যন্ত তা # উপেক্ষা করবে? & / শেষ হওয়া ইউআরএল, যা অনেক কিছু ঘটে। উদাহরণ:

https://cardsrealm.com/profile/cardsRealm -> কার্ড রিলাম ফেরত দেয়

https://cardsrealm.com/profile/cardsRealm#hello -> কার্ড রিরালাম দেয়

https://cardsrealm.com/profile/cardsRealm?hello -> কার্ডগুলি রিলাম দেয়

https://cardsrealm.com/profile/cardsRealm/ -> কার্ডের রিলাম ফেরত দেয়


0

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

[^\/]+[\/]?$

0
// https://x.com/boo/?q=foo&s=bar = boo
// https://x.com/boo?q=foo&s=bar = boo
// https://x.com/boo/ = boo
// https://x.com/boo = boo

const segment = new 
URL(window.location.href).pathname.split('/').filter(Boolean).pop();
console.log(segment);

আমার জন্য কাজ কর.


0

আমি জানি এটি পুরানো তবে আপনি যদি কোনও ইউআরএল থেকে এটি পেতে চান তবে আপনি কেবল ব্যবহার করতে পারেন:

document.location.pathname.substring(document.location.pathname.lastIndexOf('/.') + 1);

document.location.pathnameবর্তমান ইউআরএল থেকে পাথের নাম পান। lastIndexOfআমাদের ক্ষেত্রে নিম্নোক্ত রেজেক্সের শেষ ঘটনার সূচক পান /.। বিন্দুটির অর্থ কোনও অক্ষর, সুতরাং এটি /ইউআরএল-এর শেষ অক্ষর কিনা তা গণনা করা হবে না । substringদুটি সূচক মধ্যে স্ট্রিং কাটা হবে।


0

যদি ইউআরএল হয় http://localhost/madukaonline/shop.php?shop=79

console.log(location.search); আনবে ?shop=79

তাই সহজ উপায় ব্যবহার করা location.search

আপনি এখানে এবং এখানে আরও তথ্যের জন্য অনুসন্ধান করতে পারেন


0

আপনি সাধারণ পাথ (ডাব্লু / 0) ক্যোরিস্ট্রিং ইত্যাদির সাহায্যে এটি করতে পারেন

সম্ভবত অতি জটিল এবং সম্ভবত পারফরম্যান্ট নয়, তবে reduceএটির মজাদার জন্য আমি ব্যবহার করতে চেয়েছিলাম ।

  "/foo/bar/"
    .split(path.sep)
    .filter(x => x !== "")
    .reduce((_, part, i, arr) => {
      if (i == arr.length - 1) return part;
    }, "");
  1. পাথ বিভাজকগুলিতে স্ট্রিং বিভক্ত করুন।
  2. খালি স্ট্রিং পাথের অংশগুলি ফিল্টার করুন (এটি পথের পিছনে স্ল্যাশের সাথে ঘটতে পারে)।
  3. সর্বশেষে পথের অংশগুলির অ্যারে হ্রাস করুন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.