एक बाहरी फ़ाइल में जावास्क्रिप्ट में सापेक्ष पथ


84

तो मैं इस जावास्क्रिप्ट चला रहा हूँ, और सब कुछ ठीक काम करता है, पृष्ठभूमि छवि के पथ को छोड़कर। यह मेरे स्थानीय ASP.NET देव वातावरण पर काम करता है, लेकिन वर्चुअल निर्देशिका में सर्वर पर तैनात होने पर यह काम नहीं करता है।

यह एक बाहरी .js फ़ाइल में है, फ़ोल्डर संरचना है

Site/Content/style.css
Site/Scripts/myjsfile.js
Site/Images/filters_expand.jpg
Site/Images/filters_colapse.jpg

फिर यह वह जगह है जहाँ से js फ़ाइल शामिल है

Site/Views/ProductList/Index.aspx

$("#toggle").click(function() {
    if (left.width() > 0) {
        AnimateNav(left, right, 0);
        $(this).css("background", "url('../Images/filters_expand.jpg')");
    }
    else {
        AnimateNav(left, right, 170);
        $(this).css("background", "url('../Images/filters_collapse.jpg')");
    }
});

मैंने प्रयोग करने की कोशिश की है '/Images/filters_collapse.jpg'और वह भी काम नहीं करता है; हालाँकि, अगर मैं उपयोग करता हूँ तो यह सर्वर पर काम करता है '../../Images/filters_collapse.jpg'

असल में, मैं ASP.NET तिल्दा के रूप में एक ही कार्य करना चाहता हूँ - ~

अपडेट करें

क्या .js फ़ाइल के सापेक्ष बाहरी .js फ़ाइलों में पथ हैं या .js फ़ाइल के वास्तविक स्थान में शामिल हैं?


क्या सर्वर की तुलना में आपकी एप्लिकेशन निर्देशिका विकास में भिन्न है? विजुअल स्टूडियो का बिल्ट वेब सर्वर '/' के लिए डिफ़ॉल्ट पथ सेट करता है यदि आपके सर्वर ने '/ MyApp' कहा है तो आपके पास असंगत व्यवहार हो सकता है। अपने दृश्य स्टूडियो पथ को '/ MyApp' पर सेट करने का प्रयास करें
सर्वेश

यही समस्या है! वर्चुअल निर्देशिका कहाँ स्थित है, इसके आधार पर, मैं अपने जावास्क्रिप्ट को हर बार जब मैं देव से उत्पादन
Nate

ऐसा लगता है, superexpert.com/blog/archive/2009/02/18/… , वह है जो आप ढूंढ रहे हैं।
सर्वेश

मैं जावास्क्रिप्ट का उपयोग कर रहा हूँ गतिशील रूप से एक div टैग की पृष्ठभूमि छवि को बदलने के लिए। मैं कोड को मास्टर पेज फ़ाइल में वापस रखने से बचना चाहता हूँ, क्योंकि यह अपनी बाहरी .JS फ़ाइल को बहुत अधिक साफ करता है ...
Nate

जावास्क्रिप्ट के लिए ~ जैसा कुछ भी नहीं है। आप JS में एक सहायक कार्य कर सकते हैं। उदाहरण के लिए आप MyJs.Url ('Images / filter.jp') को कॉल करेंगे और यह आपकी वर्चुअल निर्देशिका को उपसर्ग करेगा और स्ट्रिंग लौटाएगा। इस तरह आपको केवल एक स्थान पर इसे बदलने की आवश्यकता होगी।
सर्वेश

जवाबों:


136

जावास्क्रिप्ट फ़ाइल पथ

जब स्क्रिप्ट में, पथ प्रदर्शित पृष्ठ के सापेक्ष होते हैं

चीजों को आसान बनाने के लिए आप इस तरह से एक साधारण js घोषणा को प्रिंट कर सकते हैं और अपनी लिपियों में इस चर का उपयोग कर सकते हैं:

समाधान, जिसे फरवरी 2010 के आसपास StackOverflow पर नियोजित किया गया था :

<script type="text/javascript">
   var imagePath = 'http://sstatic.net/so/img/';
</script>

यदि आप 2010 के आसपास इस पृष्ठ पर जा रहे थे, तो आप केवल StackOverflow के html स्रोत पर एक नज़र डाल सकते थे, आप इस बदमाश को एक-लाइनर [3 लाइनों में स्वरूपित :)] <head />अनुभाग में देख सकते थे।


7
मैंने इसे समाप्त कर दिया, सिवाय इसके कि मैं Url.Content का उपयोग imagePath.धन्यवाद के लिए मूल्य उत्पन्न करने के लिए करता हूं !
नैट

2
हाहा मैंने वही किया, फिर वापस आकर आपकी टिप्पणी nate पढ़ी।
Chev

1
यह काम करता है लेकिन यह उचित समाधान नहीं बल्कि निश्चित रूप से एक वर्कअराउंड है। @ विद्वानों के जवाब ने मुझे ओपी की समस्या का समाधान दिया।
daniloquio

7
मैं एप्लिकेशन रूट Url.Content("~")प्राप्त करता था । hth
ग्राहमफ

3
मुझे भी करना पसंद हैvar imagePath = window.location.protocol + "//" + window.location.host + "/"
जीनवल्जेन

48

'src' विशेषता के लिए DOM पार्स करके jQuery का उपयोग करके रन समय के दौरान अपनी जावास्क्रिप्ट फ़ाइल का स्थान प्राप्त करें:

var jsFileLocation = $('script[src*=example]').attr('src');  // the js file path
jsFileLocation = jsFileLocation.replace('example.js', '');   // the js folder path

(आपकी जावास्क्रिप्ट फ़ाइल को 'example.js' नाम दिया गया है)


$ ("# FkngDiv")। लोड (jsFileLocation + "../ FkngFolder / FkngPage.aspx") मेरे लिए एक आकर्षण की तरह काम किया। मैं इसे एक फ़ोल्डर स्तर पर वापस जाने के लिए इस तरह से उपयोग कर रहा हूं और फिर मैं सिर्फ अपने वांछित पथ को इंगित करता हूं।
daniloquio

6
बहुत अच्छा जवाब। मैं इस मामले में .replaceअभिव्यक्ति को बदल jsFileLocation.replace(/example\.js.*$/, '').js
दूंगा

1
आप प्रिय महोदय, मेरे सबसे नए नायक हैं! एक ASP.NET MVC अनुप्रयोग में सर्वर पर मेरे सीएसएस पथ को खोजने के लिए इस समाधान का उपयोग किया गया है, जो गतिशील रूप से एक फ़ोल्डर से एक तरह से मेरे जावास्क्रिप्ट फ़ोल्डर से बग़ल में लोड होता है ...
Hutjepower

27

एक उचित समाधान js फ़ाइल में src लिखने के बजाय एक css वर्ग का उपयोग कर रहा है। उपयोग करने के बजाय उदाहरण के लिए:

$(this).css("background", "url('../Images/filters_collapse.jpg')");

उपयोग:

$(this).addClass("xxx");

और पृष्ठ लेखन में भरी हुई एक सीएसएस फ़ाइल में लिखें:

.xxx {
  background-image:url('../Images/filters_collapse.jpg');
}

5
यदि मैं एक गैर-सीएसएस विशेषता का उपयोग कर रहा हूं तो यह काम नहीं करता है। उदाहरण के लिए <img src="/codes/imgs/a.png">:। मैं इस src विशेषता को css द्वारा सेट नहीं कर सकता।
रेज़ा

14

अच्छा प्रश्न।

  • जब सीएसएस फ़ाइल में, URL सीएसएस फ़ाइल के सापेक्ष होगा।

  • जावास्क्रिप्ट का उपयोग करते हुए गुण लिखते समय, URL हमेशा पृष्ठ (मुख्य संसाधन अनुरोध) के सापेक्ष होना चाहिए।

tildeजेएस में कोई कार्यक्षमता नहीं है जो मुझे पता है। आधार पथ को निर्दिष्ट करने वाले जावास्क्रिप्ट चर को परिभाषित करने का सामान्य तरीका होगा:

<script type="text/javascript">

  directory_root = "http://www.example.com/resources";

</script> 

और जब भी आप URL को गतिशील रूप से असाइन करते हैं, उस रूट को संदर्भित करने के लिए।


13
हार्ड कोडिंग रूट आपके dev बॉक्स, टेस्ट सर्वर, आदि पर काम नहीं करता है
RickAndMSFT

5

जिस एमवीसी 4 ऐप पर मैं काम कर रहा हूं, उसके लिए मैंने _Layout.cshtml में एक स्क्रिप्ट एलिमेंट डाला है और आवश्यक पथ के लिए एक ग्लोबल वैरिएबल बनाया है, जैसे:

<body>

<script>
    var templatesPath = "@Url.Content("~/Templates/")";
</script>

<div class="page">
    <div id="header">

       <span id="title">

        </span>
    </div>
    <div id="main">


        @RenderBody()
    </div>
    <div id="footer">
        <span></span>
    </div>
</div>


4

मैंने पक्के पैटर्न का इस्तेमाल किया। मुझे लगता है कि अभी तक एक और पैटर्न।

<script src="<% = Url.Content("~/Site/Scripts/myjsfile.js") %>?root=<% = Page.ResolveUrl("~/Site/images") %>">

और myjsfile.js में querystring पार्स किया।

प्लगइन्स | jQuery के प्लगइन्स


2

जावास्क्रिप्ट में asp.net tilda ("~") की विलासिता का आनंद लेने के लिए निम्नलिखित सिंटैक्स का उपयोग करें

<script src=<%=Page.ResolveUrl("~/MasterPages/assets/js/jquery.js")%>></script>

2

मुझे यह मेरे लिए काम करने के लिए मिला।

    <script> document.write(unescape('%3Cscript src="' + window.location.protocol + "//" +     
    window.location.host + "/" + 'js/general.js?ver=2"%3E%3C/script%3E'))</script>

पाठ्यक्रम के स्क्रिप्ट टैग के बीच ... (मुझे यकीन नहीं है कि स्क्रिप्ट टैग इस पोस्ट में क्यों नहीं दिखाई दिए ...)


मुझे नहीं पता कि आपके जवाब में गिरावट क्यों आई। संघर्ष के घंटों के बाद मेरे लिए यही काम किया ... (वाई)
जिया उल रहमान मुगल

मुझे लगता है कि क्योंकि यह servername / applicationname / js के बजाय सर्वरनाम / js को इंगित करता है , जो मुझे लगता है कि "/ js" से अलग नहीं है
user1566694

0

आपको इसके runat="server"लिए एक आईडी जोड़ने और असाइन करने की आवश्यकता है , फिर इस तरह पूर्ण पथ निर्दिष्ट करें:

<script type="text/javascript" runat="server" id="myID" src="~/js/jquery.jqGrid.js"></script>]

Codebehind से, आप src प्रोग्राम को ID का उपयोग करके बदल सकते हैं।


0

यह ASP.NET वेबफॉर्म में अच्छा काम करता है।

स्क्रिप्ट को बदलें

<img src="' + imagePath + 'chevron-large-right-grey.gif" alt="'.....

मेरे पास प्रत्येक निर्देशिका स्तर के लिए एक मास्टर पृष्ठ है और यह Page_Init इवेंट में है

  Dim vPath As String = ResolveUrl("~/Images/")
    Dim SB As New StringBuilder
    SB.Append("var imagePath = '" & vPath & "'; ")
    ScriptManager.RegisterClientScriptBlock(Me, Me.GetType(), "LoadImagePath", SB.ToString, True)

अब इस बात की परवाह किए बिना कि आवेदन स्थानीय रूप से चलाया जाता है या आपको सही पूर्ण मार्ग मिलता है

http://localhost:57387/Images/chevron-large-left-blue.png
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.