jQuery स्ट्रिंग को ढूंढता है और प्रतिस्थापित करता है


86

मेरे पास वेबसाइट पर एक विशिष्ट पाठ है, चलो "लॉलीपॉप" कहते हैं, और मैं इस स्ट्रिंग की सभी घटनाओं को "मार्शमेलो" के साथ बदलना चाहता हूं। समस्या यह है कि मुझे नहीं पता कि पाठ कहाँ है। मुझे पता है कि मैं कुछ ऐसा कर सकता था:

$(body).html($(body).html().replace('lollypops', 'marshmellows'));

यह शायद काम करेगा, लेकिन मुझे जितना हो सके उतना कम HTML फिर से लिखने की आवश्यकता है, इसलिए मैं कुछ ऐसा सोच रहा हूं:

  1. स्ट्रिंग की खोज करें
  2. निकटतम मूल तत्व खोजें
  3. केवल निकटतम मूल तत्व को फिर से लिखना
  4. इसे विशेषताओं में भी बदलें, लेकिन सभी नहीं, उदाहरण के लिए इसे अंदर बदलें class, लेकिन अंदर नहींsrc

उदाहरण के लिए, मेरे पास इस तरह की संरचना होगी

<body>
    <div>
        <div>
            <p>
               <h1>
                 <a>lollypops</a>
               </h1>
            </p>
            <span>lollypops</span>
        </div>
    </div>
    <p>
       <span class="lollypops">Hello, World!</span>
       <img src="/lollypops.jpg" alt="Cool image" />
    </p>
<body>

इस उदाहरण में, "लॉलीपॉप" की हर घटना को प्रतिस्थापित किया जाएगा, केवल <img src="...एक ही रहेगा और एकमात्र तत्व जो वास्तव में हेरफेर किया जाएगा वह होगा <a>और दोनों <span>एस।
क्या किसी को भी पता है की यह कैसे किया जाता है?


पाठ को बदलने के लिए एक उत्कृष्ट अच्छी तरह से लिखा गया प्लगइन है। jquery-replacetext-plugin । प्लग-इन पाठ को सभी टैग और विशेषताओं को छोड़ने से प्रतिस्थापित करता है। आप इस प्लग-इन के लिए एक अच्छा ट्यूटोरियल भी देख सकते हैं स्पॉटलाइट-जक्वेरी-रेपेसेटेक्ट में
हुसैन

जवाबों:


153

आप ऐसा कुछ कर सकते हैं:

$("span, p").each(function() {
    var text = $(this).text();
    text = text.replace("lollypops", "marshmellows");
    $(this).text(text);
});

पाठ के साथ सभी टैग को चिह्नित करना बेहतर होगा, जिसे उपयुक्त वर्ग नाम के साथ जांचने की आवश्यकता है।

साथ ही, इसमें प्रदर्शन समस्याएँ हो सकती हैं। सामान्य रूप से jQuery या जावास्क्रिप्ट इस तरह के संचालन के लिए वास्तव में उपयुक्त नहीं हैं। आप इसे सर्वर साइड में करना बेहतर समझते हैं।


मुझे पता है, दुर्भाग्य से मैं सर्वर साइड पर ऐसा नहीं कर सकता। इसके अलावा, आपने जो समाधान सुझाया है वह मेरे लिए अनुपयुक्त है, क्योंकि मुझे नहीं पता कि वास्तव में स्ट्रिंग कहां होगी। यह हो सकता है <span>, यह <h4>और इतने पर हो सकता है ...
साईफ

तब आप $ ("*") की कोशिश कर सकते थे, लेकिन मैं इसकी सिफारिश नहीं करूंगा।
kincnakakis

14

आप इस तरह से कुछ कर सकते हैं:

$(document.body).find('*').each(function() {
    if($(this).hasClass('lollypops')){ //class replacing..many ways to do this :)
        $(this).removeClass('lollypops');
        $(this).addClass('marshmellows');
    }
    var tmp = $(this).children().remove(); //removing and saving children to a tmp obj
    var text = $(this).text(); //getting just current node text
    text = text.replace(/lollypops/g, "marshmellows"); //replacing every lollypops occurence with marshmellows
    $(this).text(text); //setting text
    $(this).append(tmp); //re-append 'foundlings'
});

उदाहरण: http://jsfiddle.net/steweb/MhQZD/


7

नीचे दिए गए कोड का उपयोग मैंने कुछ पाठ को बदलने के लिए किया है, जिसमें रंगीन पाठ है। यह सरल है, पाठ लिया और इसे एक HTMLटैग में बदल दिया । यह उस श्रेणी के टैग में प्रत्येक शब्द के लिए काम करता है।

$('.hightlight').each(function(){
    //highlight_words('going', this);
    var high = 'going';
    high = high.replace(/\W/g, '');
    var str = high.split(" ");
    var text = $(this).text();
    text = text.replace(str, "<span style='color: blue'>"+str+"</span>");
    $(this).html(text);
});

2
var string ='my string'
var new_string = string.replace('string','new string');
alert(string);
alert(new_string);

1
मुझे लगता है कि 'बदलें' फ़ंक्शन में स्ट्रिंग चर के आसपास के उद्धरणों को हटाने की आवश्यकता है।
जेसन ग्लिसन

0

आप ऐसा कुछ कर सकते हैं:

एचटीएमएल

<div class="element">
   <span>Hi, I am Murtaza</span>
</div>


jQuery

$(".element span").text(function(index, text) { 
    return text.replace('am', 'am not'); 
});

-3

आप केवल स्ट्रिंग कंटेनर में एक वर्ग क्यों नहीं जोड़ते हैं और फिर आंतरिक पाठ को प्रतिस्थापित करते हैं? जैसे इस उदाहरण में।

HTML:

<div>
    <div>
        <p>
           <h1>
             <a class="swapText">lollipops</a>
           </h1>
        </p>
        <span class="swapText">lollipops</span>
    </div>
</div>
<p>
   <span class="lollipops">Hello, World!</span>
   <img src="/lollipops.jpg" alt="Cool image" />
</p>

jQuery:

$(document).ready(function() {
    $('.swapText').text("marshmallows");
});

2
यह एक 4 साल पुराना है और पहले से ही उत्तर दिया गया प्रश्न है, लेकिन समस्या यह थी कि आप जो सुझाव दे रहे हैं वह मैं नहीं कर सकता था।
सायबर

यह उत्तर पूरी तरह से ओपी के विनिर्देश को अनदेखा करता है: "मैं इस स्ट्रिंग की सभी घटनाओं को प्रतिस्थापित करना चाहता हूं ... समस्या यह है कि मुझे नहीं पता है कि वास्तव में पाठ कहां है।"
ल्यूक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.