2011-10-31 12 views
19

जावास्क्रिप्ट में ruby ​​gsub के समान कुछ करने का कोई तरीका है? मेरे पास एक स्थानीय HTML फ़ाइल है जिसे मैं सामग्री के साथ कुछ टेम्पलेट चर को संसाधित और प्रतिस्थापित करना चाहता हूं लेकिन मैं यह नहीं समझ सकता कि नई सामग्री के साथ टेम्पलेट चर को कैसे प्रतिस्थापित किया जाए। एचटीएमएल नीचे की तरह टुकड़े शामिल हैं:क्या जावास्क्रिप्ट में gsub के समान कुछ है?

<div id="content"> 
    <h1>{{title}}</h1> 
    {{content}} 
</div> 

अब अगर मैं एक नामित div में हर टेम्पलेट चर लपेट तो मैं अपनी सामग्री के साथ टेम्पलेट चर को बदलने के लिए jQuery के replaceAll विधि की तरह कुछ का उपयोग कर सकते, लेकिन मैं यह पता लगाने नहीं कर सकते कैसे करना है यह एक div में हर चर लपेटने के बिना।

मैं सिर्फ $ ('दस्तावेज़') जैसे कुछ करना चाहता हूं। Gsub ("{{title}}", "मैं एक शीर्षक हूं")।

किसी के पास कोई विचार है?

आपकी मदद के लिए धन्यवाद!

+0

jQuery में एक templating इंजन? Http://api.jquery.com/jquery.tmpl/ –

उत्तर

5

आप इसे लपेटकर किसी DOM तत्व के innerHTML संपत्ति, या JQuery के html संपत्ति का उपयोग कर के माध्यम से कच्चे एचटीएमएल उपयोग कर सकते हैं, और फिर प्रतिस्थापन करते हैं:

var html = $(document).html(); 
$(document).html(html.replace('{{title}}', 'I am a title'); 

संपादित करें:

के रूप में अंटी Haapala द्वारा बताया , पूरे दस्तावेज़ को बदलकर एचटीएमएल के साइड-इफेक्ट्स हो सकते हैं जिनसे आप निपटना नहीं चाहते हैं, जैसे स्क्रिप्ट को पुनः लोड किया जा रहा है। इस प्रकार, आप सबसे विशिष्ट डोम प्रतिस्थापन प्रदर्शन से पहले संभव तत्व, यानी .:

var element = $('#content'); 
var html = element.html(); 
element.html(html.replace('{{title}}', 'I am a title'); 
+0

पर एक नज़र डालें, यह स्क्रिप्ट के साथ बुरी तरह विफल हो सकता है;) –

+0

दरअसल। मैं आमतौर पर एक विशिष्ट तत्व का पता लगाता हूं और केवल अपनी सामग्री को प्रतिस्थापित करता हूं, शेष दस्तावेज़ को छूटे हुए छोड़ देता हूं। – gnab

3

खैर थोड़ा गहराई में जाकर चाहिए, तो आप एक regex के साथ String.replace उपयोग कर सकते हैं, लेकिन वास्तव में, क्या आप इस्तेमाल कर सकते हैं jQuery टेम्पलेट्स कर रहे हैं।

http://api.jquery.com/category/plugins/templates/

+0

धन्यवाद एंटी। ये एक शानदार विकल्प की तरह दिखते हैं लेकिन मेरा उपयोग मामला अपेक्षाकृत सरल है और केवल सरल प्रतिस्थापन विकल्प की आवश्यकता है जो किसी भी तरह से मुझे बचने में कामयाब रहा। – Nick

+1

इस उत्तर के चार साल बाद, स्ट्रिंग प्रतिस्थापन विकल्प अभी भी वर्तमान और व्यवहार्य है, इसलिए jQuery टेम्पलेट्स को बहिष्कृत कर दिया गया है और जेएसआरण्डर और जेएसवीव्स के साथ अधिग्रहित किया गया है। – haslo

1

मैं हाल ही में Handlebars इस्तेमाल किया एक मेज से एक डेटा विशेषता (टेम्पलेट) लेने के लिए और अपनी पंक्तियों में से एक से एक और मूल्य (रिकॉर्ड आईडी) सुई:

// data-row-url="http://example.com/people/{{id}}" 

var table = $(this).closest('.data_grid table');       

if(table.attr('data-row-url')) {           
    var record_id = $(this).data('record-id')       
    var show_url_template = table.data('row-url');      
    var url_template = Handlebars.compile(show_url_template)    
    var url = url_template({ id: record_id });       
    $.getScript(url);             
} 

संदर्भ के लिए इस कोड को चलाता है तालिका के टी तत्वों के लिए एक ऑनक्लिक घटना के अंदर से और AJAX के माध्यम से क्लिक किए गए रिकॉर्ड प्राप्त करता है।

"aa".replace("a", "b") // "ba" 

//g सभी मैचों की जगह:

30

तो दूसरों सामान्य रूप में gsub को एक बराबर देख रहे थे, यह केवल पहला मैच की जगह

"aa".replace(/a/g, "b") // "bb" 
"aa".replace(new RegExp("a", "g"), "b"); // "bb" 
1

मुझे विश्वास है कि एक मूंछें टेम्पलेट हो सकता है । आप mustache.js जांचना चाह सकते हैं। मुझे लगता है कि आप जेएस को संकलित करने में सक्षम हो सकते हैं।

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