2010-03-29 19 views
6

वहाँजावास्क्रिप्ट में लिंक क्लिक करने योग्य बनाना?

Then go to <a href="http://example.com">example.com</a> and foo the bar! 
जावास्क्रिप्ट में

एक मौजूदा HTML पृष्ठ के भीतर में

Then go to http:/example.com/ and foo the bar! 

से एक तार मोड़ के एक आसान तरीका है?

उत्तर

7

हां। सबसे आसान तरीका नियमित रूप से उन चीज़ों को प्रतिस्थापित करने के लिए नियमित अभिव्यक्तियों का उपयोग करना है जो उनके लिंक किए गए समकक्षों के लिंक की तरह दिखते हैं। कुछ ऐसा:

node.innerHTML = node.innerHTML.replace(/(http:\/\/[^\s]+)/g, "<a href='$1'>$1</a>") 

(मेरा रेगेक्स थोड़ा जंगली है, इसलिए आपको वाक्यविन्यास के साथ खेलना पड़ सकता है)। यह सिर्फ एक साधारण मामला है। आपको यहां स्क्रिप्ट इंजेक्शन से सावधान रहना होगा (उदाहरण के लिए यदि मेरे पास http://"><script>doevil()</script> है)। एक तरीका यह हल करने के लिए एक लिंक इमारत समारोह का उपयोग करना है:

node.innerHTML = node.innerHTML.replace(/ ... /g, buildLink($1)); 

कहाँ buildLink() जांच कर सकते हैं सुनिश्चित करें कि URL कुछ भी दुर्भावनापूर्ण शामिल नहीं है बनाने के लिए।

हालांकि, RegEx-innerHTML विधि टेक्स्ट के बड़े निकायों पर बहुत अच्छी तरह से प्रदर्शन नहीं करेगी, क्योंकि यह नोड की संपूर्ण HTML सामग्री को आँसू देती है और पुनर्निर्माण करती है। आप DOM तरीकों के साथ-साथ इस लक्ष्य को हासिल कर सकते हैं:

  • ढूँढें संदर्भ पाठ नोड
  • सामग्री में करने के लिए, लगता है शुरू करने और एक यूआरएल
  • उपयोग splitText() विधि के अंत अनुक्रमित 3 में नोड विभाजित करने के लिए: इससे पहले, लिंक,
  • के बाद
  • href उस लिंक से पहले इस <a> नोड डालने के लिए लिंक
  • उपयोग insertBefore() के समान होता है के साथ एक <a> नोड बनाएं
  • +०१२३५१६४१०
  • उपयोग appendChild() "एक HTML पृष्ठ के भीतर" <a> नोड
+0

दूसरी विधि के लिए +1, अधिक कुशल। –

3

प्रथम में लिंक स्थानांतरित करने के लिए मुश्किल है, एक "पेज" वास्तव में एक डोम पेड़ (जो आंशिक रूप से पाठ नोड्स से बना है और ज्यादातर से बना है क्योंकि एचटीएमएल तत्व)।

इस समस्या से संपर्क करने का सबसे आसान तरीका सामग्री समृद्ध टेक्स्ट नोड्स को लक्षित करना होगा। प्रत्येक पाठ नोड के लिए, इस तरह कुछ लागू करें:

// we'll assume this is the string of a content-rich text node 
var textNode = document.getElementById('contentNode'); 
textNode.innerHTML = textNode.innerHTML.replace(/(\s)(http:\/\/[^\s]+)(\s)/g, '$1<a href="$2">$2</a>$3'); 

बीटीडब्लू: यहां सुरक्षा प्रभाव हैं। यदि आप अनियंत्रित पाठ से लिंक उत्पन्न करते हैं, तो एक्सएसएस की संभावना है।

+0

यह मूल रूप से लेविक के समान उत्तर है। उसने पहले पोस्ट किया। – David

+0

एक्सएसएस अनुस्मारक के लिए धन्यवाद। टेक्स्ट को अस्थिर करने के तरीके पर कोई संकेत? – max

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