2013-06-07 7 views
8

मैं एक वेब पेज के शीर्ष पर "वापस टू डायर" बटन जोड़ने की कोशिश कर रहा हूं, जो उपयोगकर्ता को उसी यूआरएल पर रीडायरेक्ट करेगा, लेकिन इसमें कोई फ़ाइल नाम नहीं है।जावास्क्रिप्ट में वर्तमान यूआरएल का निर्देशिका हिस्सा कैसे प्राप्त करें?

उदाहरण के लिए

, यूआरएल को देखते हुए कि बटन पर क्लिक

http://example.com/somedir/button.html

http://example.com/somedir/

तो मैं निम्नलिखित कोड बनाया है पर पहुंच जाएगा:

<html> 
<body> 

<input type="button" 
value="back to dir" 
onclick="top.location=document.URL.replace(/[^\\]*$/, '')"> 

</body> 
</html> 

लेकिन मुझे सही कोड याद आ रहा है, जो document.URL

में वर्तमान यूआरएल से फ़ाइल नाम को दाढ़ी देगा, क्या किसी के पास कोई अच्छा विचार है?

यहाँ JSFiddle लिंक है: http://jsfiddle.net/afarber/PERBY/

और मैं jQuery इस एक बार उपयोग करने के लिए नहीं करना चाहते।

उत्तर

15

प्रयास करें इस document.URL.substr(0,document.URL.lastIndexOf('/'))

यह काम करेंगे यकीन है कि के लिए!

+0

धन्यवाद, यह अच्छा लगता है - मेरे रेगेक्स से बेहतर घटना (जहां मैंने एक टाइपो बनाया ...) –

+0

आपका स्वागत है, अगर यह अच्छा काम करता है तो इसे वोट दें, ताकि अन्य लोगों को इससे फायदा हो सके। –

+2

यह काम नहीं करता है अगर वर्तमान यूआरएल एक पीछे की स्लैश में समाप्त होता है, जैसा कि अक्सर होता है। –

1
/* to avoid query parameters, use pathname instead of href */ 
var l = document.location.pathname.split('/'); 
l.pop(); 
console.log(document.location.origin + l.join('/')); 
+1

एफवाईआई: 'document.location' को बहिष्कृत किया गया है, इसके बजाए' window.location' का उपयोग करें। – Teemu

0

निम्नलिखित है, जो ध्यान में रखा जाता प्रयास करें दोनों जब URL स्लैश में समाप्त होता है और जब यह नहीं है:

var currUrl = document.URL, 
    newUrl; 
if (currUrl.charAt(currUrl.length - 1) === '/') { 
    newUrl = currUrl.slice(0, currUrl.lastIndexOf('/')); 
    newUrl = newUrl.slice(0, newUrl.lastIndexOf('/')) + '/'; 
} else { 
    newUrl = currUrl.slice(0, currUrl.lastIndexOf('/')) + '/'; 
} 
console.log(newUrl); 
2

यह एक लाइनर भी काम करता है:

document.URL.split('/').slice(0, -1).join('/') 
0

निम्नलिखित निर्देशिकाएं शामिल हैं, जिनमें अंतिम अक्षर एक स्लैश है।

document.URL.replace(/\/[^/]+\/?$/, ''); 

यह प्रभावी रूप से कहा गया है निम्नलिखित (यह मानते हुए वे इस क्रम में पाया जा सकता है)

  1. \/: नहीं कर रहे हैं यह करने के बाद एक या अधिक वर्ण का पता लगाएं कि: एक "/"
  2. [^/]+ का पता लगाएं "/"
  3. \/?: उन वर्णों के बाद वैकल्पिक "/" खोजें
  4. $: स्ट्राइक का अंत खोजें एनजी

फिर '' द्वारा इन्हें हटा दें, इसलिए हमें केवल निर्देशिका के साथ छोड़ दिया गया है।

फिर, यह मान लिया गया है वहाँ है एक स्लेश वर्तमान एक निर्देशिका अंकन और यह सिर्फ एक यूआरएल जहां केवल स्लैश http:// भीतर कर रहे हैं नहीं है।

संबंधित मुद्दे