क्या बिना क्वेरी स्ट्रिंग के URL प्राप्त करने की कोई विधि है?


267

मैं एक ऐसा URL है http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235

मैं क्वेरी स्ट्रिंग के बिना URL प्राप्त करना चाहता हूं http://localhost/dms/mduserSecurity/UIL/index.php:।

क्या जावास्क्रिप्ट में इसके लिए कोई विधि है? वर्तमान में मैं उपयोग कर रहा हूं document.location.href, लेकिन यह पूरा URL लौटाता है।


जवाबों:


348

इसे इस्तेमाल करे: window.location.href.split('?')[0]


12
@ लिंकन - क्यों? मुझे कोई कारण नहीं दिखता कि यह असुरक्षित होगा। यह ऐनक के भीतर भी है (दोनों ही विंडो के लिए चश्मा। location.href वापस आ जाना चाहिए और URL के काम के लिए स्पेक्स) ताकि भविष्य में कोई समस्या न हो। क्लीनर कोड के लिए यह आसानी से पढ़ा और समझा जा सकता है। यह छोटे कोड के लिए छोटा है। और अंत में यह फेलिक्स के उत्तर की तुलना में कम तीव्र और कम जटिल है। फेलिक्स को गलत नहीं कहना गलत है, लेकिन यह कह रहा हूं कि असफलता / असुरक्षा के विशिष्ट उदाहरण के बिना यह जवाब बहुत बेहतर तरीके से बेहतर है।
जेम्बो जॉनी

1
आपको अन्य उत्तरों की तरह window.location.pathname
..etc का

22
@JimboJonny @Marcel यह टुकड़ा पहचानकर्ताओं (जैसे stackoverflow.com/questions/5817505#5817548# में शब्द ) को संभाल नहीं करता है । आपको regex का उपयोग करना होगा या कई .split () फ़ंक्शंस का उपयोग करना होगा, जिस बिंदु पर आपने URL को साफ़ करने में "सरल" उत्तर का मूल्य खो दिया है। दी यह तकनीकी रूप से प्रश्न के दायरे से परे है, लेकिन मैं कहूंगा कि यह अभी भी प्रासंगिक है।
andbb

2
हालांकि यह सटीक है कि यह खंड पहचानकर्ताओं को नहीं संभालता है, पूछने वाले ने पूरी तरह से स्वच्छता URL के लिए नहीं पूछा। उन्होंने विशेष रूप से एक url के लिए बिना किसी क्वेरी स्ट्रिंग के साथ पूछा, और यह उत्तर बिल्कुल यही बताता है। एक ही URL, क्वेरी स्ट्रिंग को हटा दिया गया है।
मेजर

383

Window.locationऔर Locationइंटरफ़ेस के बारे में पढ़ें :

var url = [location.protocol, '//', location.host, location.pathname].join('');

27
या अगर es6 का उपयोग कर आप एक स्ट्रिंग शाब्दिक का उपयोग कर सकते हैं ${location.protocol}//${location.host}${location.pathname}
alexreardon

हालांकि ध्यान दें कि प्रमुख ड्रॉपpathname कर सकते हैं (IE 11 तक?) । आह, IE, हमेशा एक हिमपात का एक खंड, हाँ नहीं है? /
रफिन

36
location.toString().replace(location.search, "")

11
यह बहुत ही सटीक उत्तर है। यह केवल एक ही है जो वास्तव में सवाल का जवाब देता है। इससे भी छोटा विकल्प:location.href.replace(location.search, '')
गुइडो बोमन

2
वहाँ के बारे में क्या है जो खंड का हिस्सा है जैसे domain.com/?x=1#top
Onur Topal

2
इस सवाल पर 10 जवाब हैं। उनमें से केवल एक हैश को संरक्षित करता है ( जो उस URL पर मौजूद नहीं है जो सवाल वैसे भी पूछ रहा है )। दो टिप्पणियां क्यों इंगित कर रही हैं कि यह उत्तर गैर-मौजूद हैश को संरक्षित नहीं करता है, लेकिन दूसरों को नहीं?
क्वेंटिन

13
var url = window.location.origin + window.location.pathname;

5
डाउन वोट दिया क्योंकि मूल IE11 में समर्थित नहीं है :-(
जॉर्ज

6
आप किसी चीज़ को केवल इसलिए डाउन-वोट करेंगे कि वह किसी विशेष ब्राउज़र में काम क्यों नहीं करती है? बहुत सारे स्थान अभी भी IE10 का उपयोग एक मानक के रूप में करते हैं क्योंकि वे उपयोग किए जाने वाले अनुप्रयोगों के रूप में करते हैं।
ब्रैड

1
IE11.309.16299.0 में काम करता है
रियान

10

यदि आप भी हैश को हटाना चाहते हैं, तो इसे आज़माएँ: window.location.href.split(/[?#]/)[0]


5

प्रयत्न:

document.location.protocol + '//' +
document.location.host +
document.location.pathname;

(एनबी: .hostबजाय .hostnameइसके कि बंदरगाह भी शामिल हो जाता है, यदि आवश्यक हो)



4

विभाजित (आसान तरीका) का उपयोग करके स्ट्रिंग को काटें:

var myString = "http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235"
var mySplitResult = myString.split("?");
alert(mySplitResult[0]);

3

क्वेरी को छोड़कर URL का प्रत्येक भाग प्राप्त करने के लिए:

var url = (location.origin).concat(location.pathname).concat(location.hash);

ध्यान दें कि इसमें हैश भी शामिल है, अगर वहाँ एक है (मुझे पता है कि आपके उदाहरण URL में कोई हैश नहीं है, लेकिन मैंने पूर्णता के लिए उस पहलू को शामिल किया है)। हैश को खत्म करने के लिए, बस बाहर करें .concat(location.hash)

concatजावास्क्रिप्ट स्ट्रिंग्स को एक साथ (बल्कि +) में शामिल होने के लिए उपयोग करना बेहतर है : कुछ स्थितियों में यह टाइप भ्रम जैसी समस्याओं से बचा जाता है।



1

यहाँ दो तरीके हैं:

<script type="text/javascript">
    var s="http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu
                                =true&pcode=1235";

    var st=s.substring(0, s.indexOf("?"));

    alert(st);

    alert(s.replace(/\?.*/,''));
</script>


0

बस इन दो पंक्तियों को $ (दस्तावेज़) में जोड़ें। जेएस में पहले से ही अनुसरण के रूप में:

$(document).ready(function () {
 $("div.sidebar nav a").removeClass("active");
        $('nav a[href$="'+ window.location.pathname.split("?")[0] +'"]').addClass('active');
});

डॉलर के चिह्न का उपयोग करना बेहतर है ($) (अंत के साथ)

$('nav a[href$

(^) के बजाय (साथ शुरू करें)

$('nav a[href^

क्योंकि, यदि आप (^) चिह्न का उपयोग करते हैं और आपके पास नेविगेशन मेनू में नेस्टेड URL हैं, (उदाहरण के लिए "/ खाता" और "/ खाता / भूमिकाएँ")

यह दोनों को सक्रिय करेगा।


0

यदि आप डॉट नेट कोर 3.1 का उपयोग करते हैं, तो यह केस इग्नोर रूट को सपोर्ट कर रहा है , इसलिए यदि रूट छोटे अक्षरों में है तो पिछला तरीका मददगार नहीं है और उपयोगकर्ता बड़े अक्षरों में रूट लिखता है।

तो, निम्न कोड बहुत उपयोगी है:

$(document).ready(function () {
    $("div.sidebar nav a").removeClass("active");
    var urlPath = window.location.pathname.split("?")[0];
    var nav = $('div.sidebar nav a').filter(function () {
        return $(this).attr('href').toLowerCase().indexOf(urlPath.toLocaleLowerCase()) > -1;
    });
    $(nav).each(function () {
        if ($(this).attr("href").toLowerCase() == urlPath.toLocaleLowerCase())
            $(this).addClass('active');
    });
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.