URL

2010-03-29 48 views
110

से क्वेरीस्ट्रिंग निकालें जावास्क्रिप्ट में पथ से क्वेरीस्ट्रिंग को निकालने का एक आसान तरीका क्या है? मैंने jquery के लिए एक प्लगइन देखा है जो window.location.search का उपयोग करता है। मैं ऐसा नहीं कर सकता: मेरे मामले में यूआरएल एक चर है जो AJAX से सेट है।URL

var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3&SortOrder=dsc' 
+0

संभावित स्निपेट्स के साथ तुलना करने के लायक है [पेज रीफ्रेश किए बिना जावास्क्रिप्ट के साथ window.location (URL) से हैश को कैसे हटाएं?] (Https://stackoverflow.com/questions/1397329/how-to -remove-the-hash-from-window-location-url-with-javascript-without-page-r) – PayteR

उत्तर

272

इस प्राप्त करने के लिए एक आसान तरीका है:

function getPathFromUrl(url) { 
    return url.split("?")[0]; 
} 

जो लोग भी करना चाहते हैं हैश (मूल प्रश्न का हिस्सा नहीं) कोई क्वेरी स्ट्रिंग मौजूद न होने पर हटाने के लिए, कि एक छोटा सा की आवश्यकता है अधिक:

function stripQueryStringAndHashFromPath(url) { 
    return url.split("?")[0].split("#")[0]; 
} 

संपादित

function getPathFromUrl(url) { 
    return url.split(/[?#]/)[0]; 
} 
+4

+1 ... वास्तव में विभाजित() इस मामले में substring() से बेहतर है। –

+1

हालांकि, मैंने यह भी पाया कि विभाजन() विधि की तुलना में substring() विधि लगभग दोगुनी तेज है। (फ़ायरफ़ॉक्स 3.6 में)। –

+7

मामूली अनुकूलन यदि यह महत्वपूर्ण है (शायद नहीं): 'विभाजन ('? ', 1) [0] '। – bobince

31

2 अद्यतन: एक व्यापक उत्तर प्रदान करने की कोशिश में, मैं तीन तरीकों विभिन्न जवाब में प्रस्तावित बेंचमार्किंग कर रहा हूँ। पर मैक ओएस एक्स 10.6.2 फ़ायरफ़ॉक्स 3.5.8 में

var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3'; 
var i; 

// Testing the substring method 
i = 0; 
console.time('10k substring'); 
while (i < 10000) { 
    testURL.substring(0, testURL.indexOf('?')); 
    i++; 
} 
console.timeEnd('10k substring'); 

// Testing the split method 
i = 0; 
console.time('10k split'); 
while (i < 10000) { 
    testURL.split('?')[0]; 
    i++; 
} 
console.timeEnd('10k split'); 

// Testing the RegEx method 
i = 0; 
var re = new RegExp("[^?]+"); 
console.time('10k regex'); 
while (i < 10000) { 
    testURL.match(re)[0]; 
    i++; 
} 
console.timeEnd('10k regex'); 

परिणाम: मैक ओएस एक्स पर क्रोम 5.0.307.11 में

10k substring: 16ms 
10k split:  25ms 
10k regex:  44ms 

परिणाम 10.6.2:

10k substring: 14ms 
10k split:  20ms 
10k regex:  15ms 

नोट कि substring विधि कार्यक्षमता में कम है क्योंकि यह एक रिक्त स्ट्रिंग देता है यदि URL में क्वेरीस्ट्रिंग नहीं है। उम्मीद के अनुसार, अन्य दो विधियां पूर्ण यूआरएल वापस कर देगी। हालांकि यह ध्यान रखना दिलचस्प है कि सबस्ट्रिंग विधि सबसे तेज़ है, खासकर फ़ायरफ़ॉक्स में।


1 अद्यतन:

var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3'; 
testURL.split('?')[0]; // Returns: "/Products/List" 

var testURL2 = '/Products/List'; 
testURL2.split('?')[0]; // Returns: "/Products/List" 

:
वास्तव में विभाजन() विधि suggested by Robusto एक बेहतर समाधान है कि एक मैंने पहले सुझाव दिया है, क्योंकि यह काम करेगा, भले ही कोई क्वेरी स्ट्रिंग है

मूल उत्तर:

var testURL = '/Products/List?SortDirection=dsc&Sort=price&Page=3&Page2=3'; 
testURL.substring(0, testURL.indexOf('?')); // Returns: "/Products/List" 
+9

ओ_ओ वास्तव में बहुत व्यापक है, लेकिन ... क्यों? सबसे लचीली और उचित विधि स्पष्ट रूप से जीतती है, गति बिल्कुल बिल्कुल कोई चिंता नहीं है। – deceze

+1

@deceze: सिर्फ जिज्ञासा के लिए ... और क्योंकि एंगस के उत्तर की टिप्पणियों में रेगेक्स विधि के प्रदर्शन के बारे में एक तर्क था। –

+5

बहुत दिलचस्प, डैनियल। और अगर मुझे किसी पृष्ठ पर कभी भी 10 के यूआरएल पार्स करना है तो मैं काम की एक और पंक्ति तलाशने जा रहा हूं। :) – Robusto

-1

यदि आपको URL पर जटिल संचालन करने की आवश्यकता है, तो आप jQuery url parser plugin पर एक नज़र डाल सकते हैं।

2

आप रेगुलर एक्सप्रेशन से में कर रहे हैं:@caub (मूल रूप से @crl) एक सरल कॉम्बो कि (उस के साथ एक समस्या है, हालांकि यह रेगुलर एक्सप्रेशन का उपयोग करता है, मामला किसी में) दोनों क्वेरी स्ट्रिंग और हैश के लिए काम करता है का सुझाव दिया। ...

var newURL = testURL.match(new RegExp("[^?]+")) 
+1

regexp धीमा है - आसान तेज़ तरीके से जाएं। – Aristos

+0

इस ऑपरेशन के लिए नहीं है यह नहीं है। लंबे यूआरएल पर 1000 ओप फायरफॉक्स – plodder

+1

@ एंगस में 5 एमएमएस लेते हैं: आपका लूप आपको "एक स्क्रिप्ट व्यस्त हो सकता है ..." क्योंकि आप 'ए ++' बढ़ाने के लिए भूल गए हैं। परीक्षणों को ठीक करना, मेरे फ़ायरफ़ॉक्स 3.6 में iMac 2.93 गीगा कोर 2 डुओ पर, मुझे RegEx के लिए 8ms और विभाजन विधि के लिए 3ms मिलते हैं ... फिर भी उत्तर के लिए +1, क्योंकि यह अभी भी एक और विकल्प है। –

3

एक आसान तरीका आप रीढ़ की हड्डी का उपयोग कर के रूप में

public static String stripQueryStringAndHashFromPath(String uri) { 
return uri.replaceAll(("(\\?.*|\\#.*)"), ""); 
} 
1
var path = "path/to/myfile.png?foo=bar#hash"; 

console.log(
    path.replace(/(\?.*)|(#.*)/g, "") 
); 
-1

इस प्रकार कर सकते हैं।js (जो मार्ग के रूप में url anchor शामिल हैं), यूआरएल query string प्रकट हो सकता है:

  1. url anchor से पहले:

    var url = 'http://example.com?a=1&b=3#routepath/subpath'; 
    
  2. url anchor के बाद:

    var url = 'http://example.com#routepath/subpath?a=1&b=3'; 
    

समाधान:

012,
window.location.href.replace(window.location.search, ''); 
// run as: 'http://example.com#routepath/subpath?a=1&b=3'.replace('?a=1&b=3', ''); 
0

यह एक पुराना सवाल हो सकता है लेकिन मैंने क्वेरी पैरा को हटाने के लिए इस विधि को आजमाया है। लगता है कि मेरे लिए आसानी से काम करना प्रतीत होता है क्योंकि मुझे एक रीलोड की आवश्यकता होती है और क्वेरी पैराम को हटाने के साथ मिलकर मिलती है।

window.location.href = window.location.origin + window.location.pathname; 

चूंकि मैं सरल स्ट्रिंग एडिशन ऑपरेशन का उपयोग कर रहा हूं, इसलिए मुझे लगता है कि प्रदर्शन अच्छा होगा। लेकिन अभी भी this answer