2008-10-29 9 views
39

क्या किसी को ऐसी स्क्रिप्ट के बारे में पता है जो यूआरएल के सभी पाठ संदर्भों का चयन कर सकता है और उन्हें उन स्थानों पर इंगित एंकर टैग के साथ स्वचालित रूप से प्रतिस्थापित कर सकता है?लिंक स्क्रिप्ट लिंक करने के लिए jQuery पाठ?

For example: 

http://www.google.com 

would automatically turn into 

<a href="http://www.google.com">http://www.google.com</a> 

नोट: मैं इस चाहने हूँ क्योंकि मैं अपने सभी सामग्री के माध्यम से जाने के लिए और उन्हें लंगर टैग के साथ रैप करने के लिए नहीं करना चाहती।

+0

जावास्क्रिप्ट केवल वातावरण उपलब्ध आप के लिए है है, या आप php की तरह एक सर्वर बैकएंड है? – DGM

+0

मैंने एक लाइब्रेरी बनाई है जिसे आप विचार करना चाहेंगे: ali-saleem.github.io/anchorme.js यह आकार में बहुत छोटा है, बहुत ही कुशल, बहुत संवेदनशील है, कम से कम झूठी सकारात्मकता देता है, सभी टीएलडी का समर्थन करता है, आईपी का समर्थन करता है, FTP, HTTP या यहां तक ​​कि http के बिना, HTML को छोड़कर, regex के बिना और यह लिंकिफ़ाई और ऑटोलिंकर से 3 गुना तेज है। –

उत्तर

13

JQuery आपको यहां बहुत मदद करने वाला नहीं है क्योंकि आप वास्तव में डोम ट्रैवर्सल/हेरफेर (एंकर टैग बनाने के अलावा) से चिंतित नहीं हैं। यदि आपके सभी यूआरएल < पी क्लास = "यूआरएल" > टैग्स में थे तो शायद।

एक वेनिला जावास्क्रिप्ट समाधान शायद आप चाहते हैं, और भाग्य के रूप में यह होगा, this guy should have you covered

+0

धन्यवाद आदमी! अच्छा बिंदु ... –

+5

मैं असहमत हूं, इस समस्या को हल करने में बहुत से डीओएम ट्रैवर्सिंग (शायद सीएसएस चयनकर्ताओं के बहुत सारे नहीं) शामिल हैं और jQuery इसे हल करने के लिए एक बढ़िया टूल है। (नीचे एक jQuery प्लगइन के लिए मेरा उदाहरण ड्राफ्ट देखें।) –

4

मेरा सुझाव है कि आप ब्राउजर को प्रस्तुत करने से पहले अपने स्थिर पृष्ठों पर ऐसा करें, या आप अपने खराब आगंतुकों पर रूपांतरण गणना के बोझ को दबाएंगे। आप कैसे इस रूप में मजबूत इच्छा के रूप में बनाने के बारे में विचार करना चाहेंगे

while line = gets 
    puts line.gsub(/(^|[^"'])(http\S+)/, "\\1<a href='\\2'>\\2</a>") 
end 

जाहिर है,: :) यहाँ कैसे आप रूबी में यह कर सकता है (stdin से पढ़ना, stdout के लिए लेखन) है। उपर्युक्त सभी यूआरएल को http से शुरू करने की आवश्यकता है, और उद्धरण में मौजूद यूआरएल को कनवर्ट नहीं करने की जांच करेगा (यानी जो पहले से ही < एक href = "..." > के अंदर हो सकता है)। यह ftp पकड़ नहीं होगा: //, mailto:। यह < स्क्रिप्ट > निकायों जैसे स्थानों में सामग्री को खुशी से रूपांतरित करेगा, जो आप नहीं करना चाहते हैं।

सबसे संतोषजनक समाधान वास्तव में आपके संपादक के साथ रूपांतरण करना है ताकि आप सभी प्रतिस्थापनों को नजरअंदाज कर सकें और स्वीकृति दे सकें। A good editor आपको समूह संदर्भों (उर्फ बैक संदर्भ) के साथ regexp प्रतिस्थापन करने देगा, इसलिए यह एक बड़ा सौदा नहीं होना चाहिए।

0

यदि आप किसी अन्य परिप्रेक्ष्य से समाधान चाहते हैं ... यदि आप PHP और HTML शोधक के माध्यम से पृष्ठों को चला सकते हैं, तो यह आउटपुट को स्वत: भर सकता है और किसी भी यूआरएल को लिंक कर सकता है।

56

नोट: इस स्क्रिप्ट का एक अद्यतन और सही संस्करण https://github.com/maranomynet/linkify (जीपीएल/MIT लाइसेंस) पर उपलब्ध है


हम्म ... मुझे यह jQuery के लिए एकदम सही काम की तरह लगता है।

// Define: Linkify plugin 
(function($){ 

    var url1 = /(^|&lt;|\s)(www\..+?\..+?)(\s|&gt;|$)/g, 
     url2 = /(^|&lt;|\s)(((https?|ftp):\/\/|mailto:).+?)(\s|&gt;|$)/g, 

     linkifyThis = function() { 
     var childNodes = this.childNodes, 
      i = childNodes.length; 
     while(i--) 
     { 
      var n = childNodes[i]; 
      if (n.nodeType == 3) { 
      var html = $.trim(n.nodeValue); 
      if (html) 
      { 
       html = html.replace(/&/g, '&amp;') 
         .replace(/</g, '&lt;') 
         .replace(/>/g, '&gt;') 
         .replace(url1, '$1<a href="http://$2">$2</a>$3') 
         .replace(url2, '$1<a href="$2">$2</a>$5'); 
       $(n).after(html).remove(); 
      } 
      } 
      else if (n.nodeType == 1 && !/^(a|button|textarea)$/i.test(n.tagName)) { 
      linkifyThis.call(n); 
      } 
     } 
     }; 

    $.fn.linkify = function() { 
    return this.each(linkifyThis); 
    }; 

})(jQuery); 

// Usage example: 
jQuery('div.textbody').linkify(); 

यह लिंक में निम्नलिखित की सभी घटनाओं मोड़ने का प्रयास:

  • www.example.com/path
  • http://www.example.com/path
  • ... कुछ इस तरह मेरे मन के ऊपर से आया

  • mailto:[email protected]
  • ftp://www.server.com/path
  • ... उपरोक्त सभी कोण कोण ब्रैकेट में लपेटा गया (यानी। < ...>)

का आनंद लें :-)

+0

मामूली वाक्यविन्यास त्रुटि: जबकि (i--) {// अतिरिक्त ब्रैकेट धन्यवाद! वह प्लगइन बिल्कुल वही था जो मैं ढूंढ रहा था। –

+0

त्रुटि फिक्स्ड, धन्यवाद! –

+0

बीटीडब्लू, इस स्क्रिप्ट का एक अद्यतन और सही संस्करण अब उपलब्ध है (जीपीएल/एमआईटी) http://github.com/maranomynet/linkify –

1

इस सर्वर साइड कर कभी कभी एक विकल्प नहीं है। एक क्लाइंट-साइड ट्विटर विजेट के बारे में सोचो (कि jsonp का उपयोग कर ट्विटर एपीआई के लिए सीधे चला जाता है), और आप ट्वीट गतिशील रूप में समग्र URL linkify करना चाहते हैं ...

2

इस JQuery प्लगइन पर एक नज़र डालें: https://code.google.com/p/jquery-linkifier/

+0

वह प्लगइन बहुत बेवकूफ है। यह कोई पूर्व कला का उल्लेख नहीं करता है, भले ही वहां [यूआरएल पार्सिंग और प्रमाणीकरण पुस्तकालयों के बहुत सारे हैं] (http://stackoverflow.com/a/21925491/1269037)। –

5

मैं इस समारोह मैं फोन

textToLinks: function(text) { 

    var re = /(https?:\/\/(([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?))/g; 
    return text.replace(re, "<a href=\"$1\" title=\"\">$1</a>"); 
    }