2014-04-03 8 views
5

मुझे उन सभी तत्वों के लिए एक विशिष्ट वर्ण को प्रतिस्थापित करने की आवश्यकता है जिनकी कक्षा jQuery के साथ समान है।एक ही चरित्र को कई बार कैसे बदलें?

<div class="product-name"> 
    <h1>Apple®</h1> 
</div> 

<div class="product-name"> 
    <h2>iPhone®</h2> 
</div> 

<div class="product-name"> 
    <h3>iPhone 5S®</h3> 
</div> 

मैं इस कोड के साथ सुपरस्क्रिप्ट टैग के साथ सभी ® charactesr प्रतिस्थापित करने की आवश्यकता: इस एचटीएमएल कोड पर विचार करें

$('.product-name').html(
    $('.product-name').html().replace(/®/gi, '<sup>&reg;</sup>') 
); 

हालांकि, इस कोड केवल पहली घटना की जगह लेगा। दूसरी और परे घटनाओं के लिए, यह पूरे उत्पाद नामों को पहले उत्पाद नाम से बदल देगा जिसमें एच 1 टैग शामिल हैं।

मैं अन्य वर्णों और टैगों को बदले बिना ® वर्णों को कैसे प्रतिस्थापित कर सकता हूं?

उत्तर

4

आप callback in html() उपयोग कर सकते हैं,

$('.product-name').html(function(_, html) { 
    return html.replace(/®/gi, '<sup>&reg;</sup>') 
}); 

FIDDLE

+0

+1 सभी को बदलने के लिए 'g' के उपयोग के लिए +1। बहुत यकीन है कि 'i' विकल्प इस पर अनावश्यक है :) –

+0

(विडंबना यह है कि कॉलबैक का उपयोग मौजूदा इनपुट पर मुद्दों को समाप्त करता है, यहां तक ​​कि बिना 'g' ..) – user2864740

+0

@ user2864740 - हां, अगर उनमें से केवल एक वर्ण है प्रत्येक तत्व में, रेगेक्स की आवश्यकता नहीं होगी। – adeneo

1

$('.product-name').html().split("®").join('<sup>&reg;</sup>');

एक और अधिक पूरा जवाब के लिए प्रयास करें संग्रह में प्रत्येक तत्व को मान देने के लिए

var body = $("body").html().split('®').join('<sup>&reg;</sup>'); 
$("body").html(body); 

JS Fiddle

+1

+1: विभाजन/जुड़ने का चालाक उपयोग। यह देखने के लिए दिलचस्प रहें कि गति रेगेक्स दृष्टिकोण से कैसे तुलना करती है। –

+0

इस विधि को '.each()' – Mottie

+1

के अंदर होना आवश्यक है, हां, इसे 'प्रत्येक' में होना चाहिए (और वास्तव में परिणामों को HTML तत्वों में वापस संग्रहीत करना), लेकिन यह केवल आंतरिक भाग प्रतीत होता है समस्या का। @ क्रिस्टोफर बाल्स: आप यह जवाब पूरा करना चाहेंगे। –

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