2012-01-20 28 views
6

के परिवर्तन पर URL क्वेरीस्ट्रिंग मान को प्रतिस्थापित करें मेरे पास एक ड्रॉपडाउन है जिसमें दोहरी भूमिका थी। उपयोगकर्ता पृष्ठ पर (http://mysite/events/Pages/default.aspx) सीधे आ सकता है और ड्रॉपडाउन का उपयोग कर सकता है या वे पहले खोज कर सकते हैं और ड्रॉपडाउन का चयन करके खोज को फिर से खोज सकते हैं। पहला मामला यूआरएल की तरह http://mysite/events/Pages/default.aspx?hos=Carmel और दूसरे मामले URL होगा http://mysite/events/Pages/default.aspx?kwd=health&type=Events&hos=Carmel यह अभी मैं क्या कर रहा हूँ है, लेकिन यह अजीब बर्ताव करता है और यूआरएल के लिए http://mysite.events/Pages/default.aspx?hos=Crown&hos=Carmelड्रॉपडाउन

इस तरह sth करता है तो अगर ड्रॉप-डाउन से उपयोगकर्ता चयनित कार्मेल पहली बार और फैसला किया कि वह इंडियानापोलिस की तलाश करना चाहता था, फिर इसे या तो इंडियानापोलिस के साथ 'कारमेल' को प्रतिस्थापित करना चाहिए या दूसरे मामले के लिए "& होस = इंडियानापोलिस" के साथ पूरे querstring "& होस = कारमेल" को प्रतिस्थापित करना चाहिए और "? hos = पहले परिदृश्य के लिए कारमेल "साथ"? होस = इंडियानापोलिस "

$(".hospitalDropDown").change(function(e){ 
      var querystring=window.location.search; 
      var currentURL=$(location).attr('href'); 
      if(location.href.indexOf('?') == -1) { 
       window.location.href= 'http://mysite/events/Pages/default.aspx'+'?hos='+$(this).val(); 
       } 
       else{ 

        window.location.href = ($(this).val() == "All Hospitals") ? 'http://mysitesite/events/Pages/default.aspx': location.href +'&hos='+ $(this).val(); } 
    )}; 

मुझे कुछ निफ्टी कोड मिला जो क्वेरीस्ट्रिंग को संभालने के लिए रेगेक्स का उपयोग करता है लेकिन मुझे समझ में नहीं आता कि रेगेक्स कैसे काम करता है .. मैं अपने मामले में नीचे की तरह sth का उपयोग कैसे कर सकता हूं? ताकि आप regex बारे में कुछ पता करने की जरूरत नहीं

function replaceQueryString(url,param,value) { 
    var re = new RegExp("([?|&])" + param + "=.*?(&|$)","i"); 
    if (url.match(re)) 
     return url.replace(re,'$1' + param + "=" + value + '$2'); 
    else 
     return url + '&' + param + "=" + value; 
} 

$(".hospitalDropDown").change(function(e) { 
    window.location.href = replaceQueryString(window.location.href, 'hos', $(this).val()); 
)}; 

replaceQueryString स्निपेट को पाया पहले से ही आप के लिए एक साफ थोड़ा समारोह में पैक किया गया था,:

function replaceQueryString(url,param,value) { 
    var re = new RegExp("([?|&])" + param + "=.*?(&|$)","i"); 
    if (url.match(re)) 
     return url.replace(re,'$1' + param + "=" + value + '$2'); 
    else 
     return url + '&' + param + "=" + value; 
} 

उत्तर

7

आप कुछ इस तरह करने की जरूरत है इसके प्रयेाग के लिए। आपको बस इतना करना है कि वह अपना यूआरएल, पैरामीटर जिसे आप बदलने की कोशिश कर रहे हैं ("होस") और नया मान।

इसके अलावा, $(location).attr('href') वास्तव में मान्य नहीं है, और आप इसे किसी भी तरह से उपयोग नहीं कर रहे थे, तो बस इसे बाहर निकालें और window.location.href के साथ चिपके रहें।

अंत में, हालांकि आपको इस विशेष मामले में किसी भी रेगेक्स ज्ञान की आवश्यकता नहीं है, तो आप निश्चित रूप से कम से कम कुछ मूल रेगेक्स वाक्यविन्यास सीखने से लाभ उठा सकते हैं। कुछ अच्छे स्पष्टीकरण के लिए http://www.regular-expressions.info/ पर एक नज़र डालें, और फिर नमूनों के साथ खेलने के लिए और अपने कुछ लिखने का प्रयास करने के लिए http://www.regextester.com/ जैसे रेगेक्स परीक्षक का उपयोग करें।

+0

अनदेखी आप वास्तव में सवाल का जवाब - शायद आप स्पष्टीकरण – mplungjan

+0

@mplungjan अच्छा बिंदु के सामने अपने जवाब बढ़ना चाहिए। जैसा कि आपने –

+0

का सुझाव दिया है, मैंने जवाब दिया है। इसके अलावा मैं विंडो बदलने के सुझाव देता हूं। Window.location.href वर्तमान यूआरएल का स्ट्रिंग प्रस्तुति है - इसलिए.href को बदलें लेकिन स्थान ऑब्जेक्ट सेट करें – mplungjan

0
$(".hospitalDropDown").change(function(e){ 
    var newhos=($(this).val() == "All Hospitals") ? '' : '$1hos=' + $(this).val(); 
    location.href=location.href.replace(/([\?\&])hos=\w+/,newhos); 
}); 
संबंधित मुद्दे