পৃষ্ঠা রিফ্রেশ ছাড়াই জাভাস্ক্রিপ্ট সহ উইন্ডো.লোকেশন (ইউআরএল) থেকে হ্যাশ কীভাবে সরিয়ে ফেলবেন?


331

আমার মতো ইউআরএল রয়েছে: পৃষ্ঠাটি রিফ্রেশ http://example.com#somethingনা করে আমি কীভাবে সরিয়ে ফেলব #something?

আমি নিম্নলিখিত সমাধানটি চেষ্টা করেছি:

window.location.hash = '';

তবে #এটি ইউআরএল থেকে হ্যাশ প্রতীক সরিয়ে দেয় না ।


3
আপনি কি সত্যিই এটি করতে চান? এটির ফলে একটি পৃষ্ঠা রিফ্রেশ হবে।
শেঠ

9
কোনও পৃষ্ঠা রিফ্রেশ না করে কি সম্ভব?
টম লেহম্যান

1
এটা তোলে হয় সম্ভব। এজ্যাক্স ইতিহাস গ্রন্থাগারগুলি এটির মোকাবেলা করে। তবে এটি সহজ নয় এবং প্রায় প্রতিটি ব্রাউজারের জন্য এটি আলাদাভাবে করতে হয়। এমন কিছু নয় যা আপনি .ুকতে চান।
গ্যাব্রিয়েল হারলি

ভিজ্যুয়াল ছবি বাদে "#" রেখে কি কোনও সিদ্ধান্ত রয়েছে?
ব্যবহারকারী 29660

উত্তর:


210

প্রাথমিক প্রশ্ন:

window.location.href.substr(0, window.location.href.indexOf('#'))

অথবা

window.location.href.split('#')[0]

উভয়ই হ্যাশ বা এর পরে কিছু না করে URL ফিরিয়ে দেবে।

আপনার সম্পাদনার সাথে:

যে কোনও পরিবর্তন window.locationএকটি পৃষ্ঠা রিফ্রেশকে ট্রিগার করবে। আপনি window.location.hashরিফ্রেশটি ট্রিগার না করেই পরিবর্তন করতে পারবেন (যদিও আপনার হ্যাশ পৃষ্ঠায় কোনও আইডির সাথে মিললে উইন্ডোটি লাফিয়ে উঠবে) তবে আপনি হ্যাশ চিহ্নটি থেকে মুক্তি পেতে পারবেন না। আপনার বাছাই করুন যার জন্য আরও খারাপ ...

সর্বাধিক উত্তর-তারিখের উত্তর

কোরবানি না দিয়ে কীভাবে এটি করা যায় তার সঠিক উত্তর (হয় পুরো পুনরায় লোড করুন বা হ্যাশ চিহ্নটি সেখানে রেখেই হবে) এখানে নীচে । ২০০৯ সালে আসলটি হ'ল যদিও এই উত্তরটি এখানে রেখে দিচ্ছেন যেখানে নতুন ব্রাউজারের এপিআইগুলির সঠিক উত্তরটি 1.5 বছর পরে দেওয়া হয়েছিল।


22
এটি কেবল সাধারণ ভুল, আপনি উইন্ডো.লোকেশন.হ্যাশ পরিবর্তন করতে পারেন এবং এটি রিফ্রেশকে ট্রিগার করবে না।
ইভজেনি

61
@ এভজেনি - আমার উত্তরটি এটাই বলে। আমি স্পষ্টভাবে বলছি যে উইন্ডো.লোকেশন.হ্যাশ পরিবর্তন করা রিফ্রেশকে ট্রিগার করবে না। "আপনি রিফ্রেশটি ট্রিগার না করেই উইন্ডো.লোকেশন.হ্যাশ পরিবর্তন করতে পারেন (যদিও আপনার হ্যাশ পৃষ্ঠায় কোনও আইডির সাথে মিললে উইন্ডোটি লাফিয়ে উঠবে)"।
গ্যাব্রিয়েল হারলি

3
কোনও পৃষ্ঠা পুনরায় লোড নয় - এটি প্রশ্নে রয়েছে। এটি কোনও উত্তর পুনরায় লোড করার কারণে বাধ্য করে না!
এড_

10
এছাড়াও মনে হয় এটা ✓answer করা উচিত হবে না
abernier

4
এটি ওপি প্রশ্নের উত্তর নয়।
ব্রাইস

585

এই সমস্যা সমাধান করা আজকাল নাগালের মধ্যে অনেক বেশি। HTML5 এর ইতিহাস এপিআই আমাদের বর্তমান ডোমেনের মধ্যে কোনো URL প্রদর্শন করে অবস্থান দণ্ডের নিপূণভাবে করতে পারবেন।

function removeHash () { 
    history.pushState("", document.title, window.location.pathname
                                                       + window.location.search);
}

কার্যকারিতা ডেমো: http://jsfiddle.net/AndyE/ycmPt/ শো /

এটি ক্রোম 9, ফায়ারফক্স 4, সাফারি 5, অপেরা 11.50 এবং আইই 10 তে কাজ করে uns

function removeHash () { 
    var scrollV, scrollH, loc = window.location;
    if ("pushState" in history)
        history.pushState("", document.title, loc.pathname + loc.search);
    else {
        // Prevent scrolling by storing the page's current scroll offset
        scrollV = document.body.scrollTop;
        scrollH = document.body.scrollLeft;

        loc.hash = "";

        // Restore the scroll offset, should be flicker free
        document.body.scrollTop = scrollV;
        document.body.scrollLeft = scrollH;
    }
}

সুতরাং আপনি হ্যাশ প্রতীকটি থেকে মুক্তি পেতে পারেন, কেবলমাত্র সমস্ত ব্রাউজারেই নয় - এখনও।

দ্রষ্টব্য: আপনি যদি ব্রাউজারের ইতিহাসে বর্তমান পৃষ্ঠাটি প্রতিস্থাপন করতে চান তবে replaceState()পরিবর্তে ব্যবহার করুন pushState()


9
আপনি ক্যোরির স্ট্রিংটি হারাবেন না তা নিশ্চিত করতে এই লাইনটি ব্যবহার করুন: ইতিহাস.পুষস্টেট ("", ডকুমেন্ট.টাইটেল, উইন্ডো.লোকেশন.প্যাথনাম + উইন্ডো.লোকেশন.সন্ধান);
ফিল কুলাক

6
@ ফিল: এটি উল্লেখ করার জন্য ধন্যবাদ, আমি সেই অনুযায়ী উত্তর আপডেট করেছি। আমি বেশ ইউআরএল ব্যবহার করতে অভ্যস্ত।
অ্যান্ডি ই

1
আইআই এর পুরানো সংস্করণগুলির জন্য, মনে হয় আপনার ডকুমেন্ট.বডের পরিবর্তে ডকুমেন্ট.ডোকমেন্ট এলিমেন্ট ব্যবহার করা উচিত। এই উত্তরটি দেখুন stackoverflow.com/a/2717272/359048
jasonmcclurg

29
ব্রাশ ব্রাউজারের ইতিহাসে কোনও অতিরিক্ত এন্ট্রি না তৈরি করার জন্য, আমি পুসস্টেটের পরিবর্তে প্রতিস্থাপনস্টেট ব্যবহার করার পরামর্শ দিচ্ছি।
নিকো

1
@ সানটিয়াগোরিজিটি: আপনি ঠিক বলেছেন, আমি ঠিক একই সিদ্ধান্তে পৌঁছেছি। আমি নিজের লেখা কোডটি (7 বছর আগে!) সঠিকভাবে পরিদর্শন করিনি এবং মিস করেছি যে হ্যাশ সরানোর সময় আমি বোতামের স্থিতি টগল করছি। যেহেতু আপনি হ্যাশটি ম্যানুয়ালি পরিবর্তন করছেন তাই আপনি সর্বদা ইভেন্টটি নিজেই ট্রিগার করতে পারতেন, আমি মনে করি।
অ্যান্ডি ই

85

(অনেকগুলি উত্তর অপ্রয়োজনীয় এবং পুরানো)) এখন সেরা সমাধানটি হ'ল:

history.replaceState(null, null, ' ');

5
history.pushState(null, null, ' ')পরিবর্তে যদি আপনি ইতিহাস সংরক্ষণ করতে চান তবে ব্যবহার করুন।
নিচিজৌ

9
এটা কি ক্ষণস্থায়ী ব্যাখ্যা করতে সহায়ক হতে পারে nullজন্য stateএবং titleপরামিতি পরিণামে আছে।
ভি রুবনেটি

এটির সাথে একটি সমস্যা এবং বাকিটি হ'ল এটি হ'ল অ্যানশ্যাশচেঞ্জকে ট্রিগার করে না, যদিও হ্যাশটি এখন আগে খালি ছিল না it
কার্টিস

1
টাইপস্ক্রিপ্টে, দ্বিতীয় প্যারামিটারের জন্য নালকে অনুমোদিত নয় কারণ কমান্ডটি স্ট্রিং নেয়। মজিলা খালি স্ট্রিংয়ের পরামর্শ দেয়।
কার্টিস

41

সহজ এবং মার্জিত:

history.replaceState({}, document.title, ".");  // replace / with . to keep url

3
আপনি যদি একই ডিরেক্টরিতে থাকতে চান তবে স্ল্যাশের পরিবর্তে একটি বিন্দু ব্যবহার করুন
vahanpwns

1
.পরিবর্তে ব্যবহার করতে দয়া করে @vahanpwns নোট হিসাবে উত্তর আপডেট করুন /। ইউআরএলকে /মূল পথে পরিবর্তন করে ব্যবহার করে ।
আইজাক গ্রেগসন

5
এই উত্তরের জন্য ধন্যবাদ, আমি history.replaceState({}, document.title, location.href.substr(0, location.href.length-location.hash.length));আমার ব্যবহারের ক্ষেত্রে পরিবর্তন করেছি।
স্কট জংউথर्थ

5
এটি url ক্যোয়ারী সংরক্ষণ করে না।
ভ্লাদিস্লাভ কোস্টেনকো

2
আমার ব্যবহারের ক্ষেত্রে history.replaceState(null, document.title, location.pathname + location.search);
চাপের

16

হ্যাশ অপসারণ করতে, আপনি এই ফাংশনটি ব্যবহার করে দেখতে পারেন

function remove_hash_from_url()
{
    var uri = window.location.toString();
    if (uri.indexOf("#") > 0) {
        var clean_uri = uri.substring(0, uri.indexOf("#"));
        window.history.replaceState({}, document.title, clean_uri);
    }
}

13

এটি পাশাপাশি চলমান হ্যাশও সরিয়ে ফেলবে। উদাহরণস্বরূপ: http://test.com/123#abc -> http://test.com/123

if(window.history.pushState) {
    window.history.pushState('', '/', window.location.pathname)
} else {
    window.location.hash = '';
}

এটি ইউআরএলে থাকা যে কোনও কোয়েরি
প্যারামগুলি

1
@ কেভগাথুকু আপনি এগুলি আবার লোকেশন.সন্ধানের সাথে যুক্ত করতে পারেন, উদাহরণস্বরূপ: `উইন্ডো হিস্টোরি.পুষস্টেট ('', '/', উইন্ডো.লোকেশন.প্যাথনাম + উইন্ডো.লোকেশন.সার্চ)`
ক্রিস

6

নিম্নলিখিত সম্পর্কে কীভাবে?

window.location.hash=' '

দয়া করে নোট করুন যে হ্যাশটি একটি একক স্থানে সেট করছে এবং খালি স্ট্রিং নয়।


একটি অকার্যকর অ্যাঙ্কারে হ্যাশ সেট করাও রিফ্রেশের কারণ নয়। যেমন,

window.location.hash='invalidtag'

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

এবং ওহে স্ট্যাক ওভারফ্লোতে এটি আমার প্রথম উত্তর। আশা করি কেউ এটিকে দরকারী বলে মনে করেন এবং এটি সম্প্রদায়ে মানগুলির সাথে মেলে।


7
হোয়াইটস্পেসে হ্যাশ সেট করা এখনও ইউআরএল শেষে # রাখে, আমি মনে করি লক্ষ্য এটি সম্পূর্ণরূপে অপসারণ করা।
মাহেমফ

1
এটি URL এর শেষে একটি হ্যাশ অনুসরণ করে। প্রশ্নটি কীভাবে এটি অপসারণ করা যায়।
গুরমিত সিং

হ্যাঁ আমরা কীভাবে # হ্যাশ স্ট্রিংয়ের সাহায্যে অপসারণ করতে পারি।
ভাভিন থুমার

6

আপনি নীচের মত এটি করতে পারেন:

history.replaceState({}, document.title, window.location.href.split('#')[0]);


1
তারাযুক্ত উত্তর দুটি ক্ষেত্রেই আমার পক্ষে কার্যকর হয়নি, তবে এইটি কার্যকর হয়েছিল। ধন্যবাদ!
দেব

5
const url = new URL(window.location);
url.hash = '';
history.replaceState(null, document.title, url);

2
যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কেন এবং / অথবা এই কোডটির প্রশ্নের উত্তর কীভাবে তার দীর্ঘমেয়াদী মানকে উন্নত করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করে।
রোলস্টুহফলাহার

3
<script type="text/javascript">
var uri = window.location.toString();
if (uri.indexOf("?") > 0) {
    var clean_uri = uri.substring(0, uri.indexOf("?"));
    window.history.replaceState({}, document.title, clean_uri);
}
</script>

মাথা বিভাগে এই কোড রাখুন


3
function removeLocationHash(){
    var noHashURL = window.location.href.replace(/#.*$/, '');
    window.history.replaceState('', document.title, noHashURL) 
}

window.addEventListener("load", function(){
    removeLocationHash();
});


0

নিম্নলিখিত চেষ্টা করুন:

window.history.back(1);

23
ব্যবহারকারী যদি হ্যাশ সহ ইউআরএল সরাসরি এসে থাকে তবে এটি প্রশ্নের উত্তর দেয় না।
নিকব

এই কৌশলটি খুব কার্যকর যখন আপনি কেবল পূর্ববর্তী পৃষ্ঠায় একটি লিঙ্ক তৈরি করতে চান তবে লিঙ্কটি জেএস ফাইলগুলির গোছায় লুকানো আছে।
ValidfroM

ঠিক আমি খুঁজছেন ছিল কি. জাভাস্রিপ ফাংশন দ্বারা ফিরিয়ে দেওয়া কোনও মান ভোগ করতে স্রেফ আমার ওয়েব অ্যাপ্লিকেশন দ্বারা তৈরি একটি হ্যাশট্যাগ সরাতে এটি পুরোপুরি কাজ করে।
ব্যবহারকারী 278859

0

এখানে href ব্যবহার করে অবস্থান পরিবর্তন করার এবং স্ক্রোলিং ছাড়াই হ্যাশ সাফ করার আরও একটি সমাধান রয়েছে।

যাদু সমাধান এখানে ব্যাখ্যা করা হয় । চশমা এখানে

const hash = window.location.hash;
history.scrollRestoration = 'manual';
window.location.href = hash;    
history.pushState('', document.title, window.location.pathname);

দ্রষ্টব্য: প্রস্তাবিত এপিআই এখন হোয়াটডব্লিউজি এইচটিএমএল লিভিং স্ট্যান্ডার্ডের অংশ


0
  $(window).on('hashchange', function (e) {
        history.replaceState("", document.title, e.originalEvent.oldURL);
    });

-1

আপনি নাল দিয়ে হ্যাশ প্রতিস্থাপন করতে পারেন

var urlWithoutHash = document.location.href.replace(location.hash , "" );

1
প্রশ্নটি "পৃষ্ঠাটিকে রিফ্রেশ করার কারণ ছাড়াই" জিজ্ঞাসা করে তবে এই পদ্ধতিটি পৃষ্ঠাটি রিফ্রেশ করে। আপনার উত্তরে এই সত্যটি লক্ষ্য করা উচিত, সুতরাং আমরা এখানে প্রথমে জবাব দেওয়ার দরকার নেই যে আমরা আসলে এখানে উত্তর দেওয়ার চেষ্টা করছি তার চেয়ে আলাদা প্রশ্নের উত্তর দিচ্ছি।
ভ্লাদিমির কর্নিয়া

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