2010-04-14 8 views
21

मैं किसी बिंदु पर पुष्टि करना चाहता हूं।एक लिंक की href संपत्ति से पूर्ण URI प्राप्त करें

मेरा लक्ष्य एक लिंक से href संपत्ति पढ़ने के दौरान हमेशा एक ही स्ट्रिंग (जो मेरे मामले में यूआरआई है) प्राप्त करना है। उदाहरण:

base_url साथ <a href="test.htm" /> = http://domain.name/

base_url साथ <a href="../test.htm" /> = http://domain.name/domain/

base_url साथ <a href="http://domain.name/test.htm" /> = http://domain.name/

से किसी भी फ़ोल्डर मैं ऊपर 3 स्थितियों से http://domain.name/test.htm प्राप्त करने की आवश्यकता (या किसी अन्य समान स्ट्रिंग)।

कुछ परीक्षणों के बाद, ऐसा लगता है कि my_a_dom_node.href हमेशा http://domaine.name समेत पूर्ण-योग्य यूआरआई लौटाता है, जो कि मैं चाहता हूं कि ठीक है।

jQuery का एक अलग व्यवहार है और $(my_a_dom_node).attr('href') HTML के अंदर दिखाई देने वाली सामग्री (टेक्स्ट) देता है। इसलिए मेरा चाल पूर्ण यूआरआई प्राप्त करने के लिए $(my_a_dom_node).get(0).href का उपयोग करना है।

सवाल यह है: क्या मैं इस पर भरोसा कर सकता हूं?

+3

बीटीडब्ल्यू: '$ (my_a_dom_node) .get (0) .href' ==' $ (my_a_dom_node) [0] .href' – Tomalak

उत्तर

21

हाँ, आप भरोसा कर सकते हैं!

एक बार जब लोग सरल जावास्क्रिप्ट (कोई jQuery नहीं) का उपयोग कर रहे थे तो कई लोगों ने जो पूछा है उसके विपरीत पूछा, वे असली विशेषता को href विशेषता में लिखे गए थे, पूर्ण नहीं, इस तरह के मामले में बस कार्य करें:

my_a_dom_node.getAttribute('href', 2); //works both IE/FF 

तो यह jQuery है कि लोगों को मदद की जानने वे इस तरह के कोड की आवश्यकता होगी और jQuery हमेशा वास्तविक यूआरएल href विशेषता में लिखा के रूप में वापस में अपने समय बर्बाद करने के लिए नहीं आया था।

यह मजाकिया है कि अब कोई पूछ रहा है कि पूर्ण यूआरएल कैसे प्राप्त करें क्योंकि jQuery href विशेषता में लिखे गए एक को लौटाता है।

+0

पर काम नहीं कर रहा है हां, मैंने उन प्रश्नों को पाया जिनके बारे में आप मुझसे बात कर रहे थे जब मैंने अपना प्रश्न लिखा था। जवाब के लिए धन्यवाद। – Savageman

+0

आप मूल्य '2' का दूसरा तर्क क्यों दे रहे हैं? 'getAttribute' में केवल एक तर्क है। – Noitidart

+0

@ नोइटिडार्ट: getAttribute दो तर्कों के साथ आता है, दूसरा तर्क वैकल्पिक है: http://msdn.microsoft.com/en-us/library/ms536429(v=vs.85).aspx –

1

आप जावास्क्रिप्ट का एक सा का उपयोग कर पूर्ण यूआरएल को संयोजित कर के:

function parseLink(link) { 
    var baseUrl = location.href.substring(0,location.href.lastIndexOf('/')); 
    if (link.indexOf('/') != -1) { 
     link = link.substring(link.lastIndexOf('/')); 
    } else { 
     link = "/"+ link; 
    } 
    var fullUrl = baseUrl + link; 
    return fullUrl 
} 
+0

क्या यह वास्तव में किसी भी उप-फ़ोल्डर और सापेक्ष पथ के लिए काम करेगा? मेरी समझ से, यह मामला नहीं है। – Savageman

+0

मुझे ऐसा लगता है, बेस यूआरएल चीज बहुत सीधी है। शायद मुझे गलत साबित करने के लिए कोई? – rnaud

+0

उप फ़ोल्डर्स –

10

हां, आप इस पर भरोसा कर सकते हैं।

jQuery.extend({ 
    // ... 
    attr: function(elem, name, value, pass) { 
    // ... 

    var attr = !jQuery.support.hrefNormalized && notxml && special ? 
       // Some attributes require a special call on IE 
       elem.getAttribute(name, 2) : 
       elem.getAttribute(name); 

    // Non-existent attributes return null, we normalize to undefined 
    return attr === null ? undefined : attr;  
    } 
}); 

तो it'effectively कॉल elem.getAttribute('href') जो वास्तविक विशेषता मान देता है:

jQuery (1.4.2) स्रोत कोड के माध्यम से देख रहे हैं, मैं jQuery.attr() समारोह इस्तेमाल किया जा रहा (प्रासंगिक भागों पर सघन) देखें , जबकि href डिज़ाइन द्वारा संपत्ति कैनोनिकल यूआरएल लौटाती है।

  • hrefNormalized: सच के बराबर है .getAttribute() विधि प्राप्त करता है तो तत्वों अपरिवर्तित की href विशेषता

    हालांकि, वहाँ jQuery.support.hrefNormalized के लिए एक संदर्भ है, जिनमें से jQuery समर्थन साइट में क्या कहना है है को पूरी तरह से योग्य यूआरएल में सामान्य करने के बजाए। (यह वर्तमान में आईई में गलत है, यूआरएल सामान्यीकृत हैं)। डोम L3 कल्पना

यह मूलतः इसका मतलब है कि jQuery अपने आप ही ब्राउज़र के व्यवहार पता चल गया है और उसके अनुसार adapts एक सुसंगत परिणाम प्रदान करने के लिए।

+0

ग्रेट, उत्तर के लिए धन्यवाद। काश मैं यहां 2 स्वीकृत एवरर्स दे सकता हूं। मैंने मार्को डेमायो को वोट दिया, क्योंकि वह पहले थे और मूल रूप से वही कहते थे। – Savageman

+0

@Savageman: हाँ ... मुझे स्रोत कोड के माध्यम से खोदने में कुछ समय लगा। ;) – Tomalak

10

मुझे पता है कि यह एक पुराना सवाल है, लेकिन वास्तव में यह पहली प्रविष्टि है जो पॉप अप हुआ, मुझे विश्वास है कि अतिरिक्त समाधान जोड़ने के लिए अच्छा है। जब से jQuery ने "प्रोप" फ़ंक्शन पेश किया है, तो पूरा यूआरएल प्राप्त करना उतना आसान है जितना:

$(my_a_dom_node).prop('href'); 

मुझे उम्मीद है कि अभी भी किसी की मदद करेगा।

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