बॉडी टेक्स्ट में शब्दों को बदलें


93

क्या सामान्य पाठ को टेबल तत्व के भीतर बदलने का एक तरीका है जो HTML के शरीर के भीतर रखा गया है?

"नमस्ते" के साथ "हैलो" की जगह?

कृपया केवल jQuery के बिना जावास्क्रिप्ट का उपयोग करें ।


क्या आप कृपया अधिक विशिष्ट हो सकते हैं? आप क्या बदलना चाहते हैं, यह शरीर में कहाँ है, आदि
ज़ीरक

शरीर में एक डिव है और उसके भीतर एक मेज है, तो मैं कुछ सामान्य पाठ कोड को प्रतिस्थापित करना चाहूंगा जैसे कोड ("नमस्ते") को ("हाय")
वाह्टेवर

3
नीचे दिए गए अधिकांश समाधान सभी घटनाओं और संपूर्ण डोम संरचना को नष्ट कर देंगे यदि शब्द को प्रतिस्थापित किया जा रहा है तो वर्ग नाम, टैग नाम या html में कुछ भी हो सकता है
मुहम्मद उमेर

ऐसा लगता है कि प्रश्न और उत्तर दोनों ही गलत हैं। यह पूछता है कि शब्दों को कैसे बदलना है और वर्ण नहीं। जैसे कि इस का प्रतिस्थापन hello, this is a text randomTexthelloहोना चाहिए hi, this is a text randomTexthello। हालांकि, अन्य सभी उत्तर यहां शब्दों के बजाय वर्णों की जगह ले रहे हैं।
ओर्हुन अल्फा ओरल सेप

जवाबों:


139

अपने HTML में एक स्ट्रिंग को बदलने के लिए एक और विधि का उपयोग करके आंतरिक HTML पर बदलें :

document.body.innerHTML = document.body.innerHTML.replace('hello', 'hi');

ध्यान दें कि यह helloआपके HTML कोड में किसी भी उदाहरण (जैसे वर्ग के नाम आदि) सहित पूरे शरीर के पहले उदाहरण को बदल देगा , इसलिए सावधानी के साथ उपयोग करें - बेहतर परिणामों के लिए, अपने कोड का उपयोग करके अपने प्रतिस्थापन के दायरे को सीमित करने का प्रयास करें document.getElementById या समान।

लक्ष्य स्ट्रिंग के सभी उदाहरणों को बदलने के लिए, gलोबेल ध्वज के साथ एक सरल नियमित अभिव्यक्ति का उपयोग करें :

document.body.innerHTML = document.body.innerHTML.replace(/hello/g, 'hi');

1
मेरे लिए यहाँ काम नहीं किया है जो मैंने प्रयोग किया है <script type="text/javascript"> window.onload = clear(); function clear() { document.body.innerHTML = document.body.replace('ü', 'n'); } </script>
वाह्टर

यह विस्तारित वर्णों के साथ अधिक जटिल हो सकता है - आपके दस्तावेज़ में कौन सी एन्कोडिंग है? क्या आप सुनिश्चित हैं कि चरित्र एक ü है, और नहीं & # 252; उदाहरण के लिए..?
डेक्सटर

2
आपने मेरे कोड को सही तरीके से कॉपी नहीं किया ;-) सुनिश्चित करें कि आपने स्टेटमेंट के दोनों किनारों पर इनर HTML पाया है, अर्थात: document.body.innerHTML = document.body.innerHTML.replace ('ü', 'n');
डेक्सटर

3
FYI करें - पहली टिप्पणी में बग है: window.onload = clear;कोष्ठक के बिना सेट "()"। जब आप लिखते हैं clear()तब आप वास्तव में फ़ंक्शन को निष्पादित करते हैं, लेकिन आप केवल फ़ंक्शन को ऑनलोड-हैंडलर को सौंपना चाहते हैं
फिलिप्पंस

1
ध्यान दें कि innerHTML का उपयोग कर आम तौर पर बुरा माना जाता है इन दिनों: slideshare.net/x00mario/the-innerhtml-apocalypse
kufudo

13

नीचे दिया गया कार्य मेरे लिए पूरी तरह से काम करता है:

// Note this *is* JQuery, see below for JS solution instead
function replaceText(selector, text, newText, flags) {
  var matcher = new RegExp(text, flags);
  $(selector).each(function () {
    var $this = $(this);
    if (!$this.children().length)
       $this.text($this.text().replace(matcher, newText));
  });
}

यहाँ एक उदाहरण है:

function replaceAllText() {
  replaceText('*', 'hello', 'hi', 'g');
}

$(document).ready(replaceAllText);
$('html').ajaxStop(replaceAllText);

आप भी ऐसा करने के लिए एक सीधा प्रतिस्थापन का उपयोग कर सकते हैं:

document.body.innerHTML = document.body.innerHTML.replace('hello', 'hi');

लेकिन इसके साथ सावधान रहें क्योंकि यह टैग, सीएसएस और स्क्रिप्ट को भी प्रभावित कर सकता है।

संपादित करें: शुद्ध जावास्क्रिप्ट समाधान के लिए इस विधि का उपयोग करें:

function replaceText(selector, text, newText, flags) {
  var matcher = new RegExp(text, flags);
  var elems = document.querySelectorAll(selector), i;

  for (i = 0; i < elems.length; i++)
    if (!elems[i].childNodes.length)
      elems[i].innerHTML = elems[i].innerHTML.replace(matcher, newText);
}

एक विशिष्ट टैग (जैसे <p> या <span>) में किसी अन्य पाठ के साथ सभी पाठ को बदलने के बारे में कैसे जाना जाएगा?
GJZ

केवल पहले इनपुट पैरामीटर में टैग का नाम जोड़ें (जैसे कि प्रतिस्थापन) ('पी, स्पैन', 'हैलो', 'हाय')
Ziad

यह सही ढंग से काम नहीं करता है। इस पर विचार करें: <p> हैलो <strong> दुनिया </ strong> </ p>। हैलो को प्रतिस्थापित नहीं किया जाता है।
डेविड विल्हुबेर

नमस्ते मैं कोडिंग में शुरुआत कर रहा हूँ। मैं AppleScript के साथ कुछ अच्छा कर सकता हूं। लेकिन यह सब मुझे पता है। क्या आप मुझे कुछ सलाह दे सकते हैं, किससे शुरू करना है, मेरा उद्देश्य जावास्क्रिप्ट का उपयोग करके डेटाबेस, चित्र, वीडियो को इकट्ठा करने, वेब फ़ॉर्म भरने, अपलोड करने के लिए उपयोग करना, एक्सेल के साथ काम करना हो सकता है। इसके साथ अप्प्सस्क्रिप्ट ठीक है लेकिन जावा एक नया स्तर है और बहुत बेहतर है। अपने उद्देश्यों को प्राप्त करने के लिए मुझे क्या शुरू करना चाहिए। मुझे जावास्क्रिप्ट के बारे में 0 पता है और मैं यह भी नहीं जानता कि काम के ऊपर आपकी स्क्रिप्ट कैसे बनाई जाए! मैं इसे कहाँ चिपकाने के लिए मान सकता हूँ? बहुत बहुत धन्यवाद!
दुई

10

मैंने इस फ़ंक्शन को साइड इफेक्ट्स (अब तक) के बिना सुरक्षित रूप से पाठ को बदलने के लिए समाप्त किया:

function replaceInText(element, pattern, replacement) {
    for (let node of element.childNodes) {
        switch (node.nodeType) {
            case Node.ELEMENT_NODE:
                replaceInText(node, pattern, replacement);
                break;
            case Node.TEXT_NODE:
                node.textContent = node.textContent.replace(pattern, replacement);
                break;
            case Node.DOCUMENT_NODE:
                replaceInText(node, pattern, replacement);
        }
    }
}

यह उन मामलों के लिए है जहां 16kB findAndReplaceDOMTextथोड़ा भारी हैं।


नमस्ते मैं कोडिंग में शुरुआत कर रहा हूँ। मैं AppleScript के साथ कुछ अच्छा कर सकता हूं। लेकिन यह सब मुझे पता है। क्या आप मुझे कुछ सलाह दे सकते हैं, किससे शुरू करना है, मेरा उद्देश्य जावास्क्रिप्ट का उपयोग करके डेटाबेस, चित्र, वीडियो को इकट्ठा करने, वेब फ़ॉर्म भरने, अपलोड करने के लिए उपयोग करना, एक्सेल के साथ काम करना हो सकता है। इसके साथ अप्प्सस्क्रिप्ट ठीक है लेकिन जावा एक नया स्तर है और बहुत बेहतर है। अपने उद्देश्यों को प्राप्त करने के लिए मुझे क्या शुरू करना चाहिए। मुझे जावास्क्रिप्ट के बारे में 0 पता है और मैं यह भी नहीं जानता कि काम के ऊपर आपकी स्क्रिप्ट कैसे बनाई जाए! मैं इसे कहाँ चिपकाने के लिए मान सकता हूँ? बहुत बहुत धन्यवाद!
दुई

Duy Duy, कि समस्याओं का एक बहुत कुछ है। कार्य विवरण को देखते हुए, नौकरी छोड़ने के लिए पर्याप्त कारण है।
फंकी-फ्यूचर

9

मुझे भी यही समस्या थी। मैंने अपने स्वयं के फ़ंक्शन को आंतरिक HTML पर प्रतिस्थापित का उपयोग करते हुए लिखा था, लेकिन यह एंकर लिंक और इस तरह से पेंच करेगा।

इसे सही ढंग से काम करने के लिए मैंने इसे पूरा करने के लिए एक पुस्तकालय का उपयोग किया।

लाइब्रेरी में एक भयानक एपीआई है। स्क्रिप्ट को शामिल करने के बाद मैंने इसे इस तरह बुलाया:

findAndReplaceDOMText(document.body, {
  find: 'texttofind',
  replace: 'texttoreplace'
  }
);

यह एकमात्र समाधान था जिसने मेरे मुद्दे पर काम किया। मुझे एक संपूर्ण साइट पर फ़ोन नंबर खोजने और बदलने के लिए REGEX का उपयोग करने की आवश्यकता थी और यहां अन्य उत्तर मेरी DOM घटनाओं को तोड़ देंगे।
दावीह

3

मैं एक बहुत बड़ी स्ट्रिंग को बदलने की कोशिश कर रहा था और किसी कारण से नियमित अभिव्यक्ति कुछ त्रुटियों / अपवादों को फेंक रहा था।

इसलिए मुझे नियमित अभिव्यक्ति के लिए यह विकल्प मिला जो बहुत तेजी से चलता है। कम से कम यह मेरे लिए काफी तेज था:

var search = "search string";
var replacement = "replacement string";

document.body.innerHTML = document.body.innerHTML.split(search).join(replacement)

src: जावास्क्रिप्ट में स्ट्रिंग की सभी घटनाओं को कैसे बदलें?


2

डिफ़ॉल्ट जावास्क्रिप्ट स्ट्रिंग बदलें फ़ंक्शन का उपयोग करें

var curInnerHTML = document.body.innerHTML;
curInnerHTML = curInnerHTML.replace("hello", "hi");
document.body.innerHTML = curInnerHTML;

1

ऊपर दिए गए समाधान को बहुत बड़े दस्तावेज़ पर लागू करने का प्रयास करें, बहुत कम तारों की जगह जो इनर HTML या इनरटेक्स्ट में मौजूद हो सकता है, और आपका html डिज़ाइन सबसे अच्छा हो जाता है

इसलिए मैं सबसे पहले HTML डोम नोड्स के माध्यम से केवल टेक्स्ट नोड तत्वों को पिक करता हूं, इस तरह

function textNodesUnder(node){
  var all = [];
  for (node=node.firstChild;node;node=node.nextSibling){
    if (node.nodeType==3) all.push(node);
    else all = all.concat(textNodesUnder(node));
  }
  return all;
}

textNodes=textNodesUnder(document.body)
for (i in textNodes) { textNodes[i].nodeValue = textNodes[i].nodeValue.replace(/hello/g, 'hi');    

`और बाद में मैंने उन सभी को चक्र में प्रतिस्थापन लागू किया


1

जैसा कि मैंने इस त्रुटि को रखा, कायरता-भविष्य के जवाब में एक उदाहरण जोड़ना चाहता था :

Uncaught TypeError: element.childNodes is not iterable

इस तरह का उपयोग करें:

replaceInText(document.body,"search term","replacement");

यह मेरे लिए jQuery के चयनकर्ताओं के साथ काम नहीं किया।


1
यदि आपके पास कोई नया प्रश्न है, तो कृपया प्रश्न पूछें बटन पर क्लिक करके पूछें । इस प्रश्न का लिंक शामिल करें यदि यह संदर्भ प्रदान करने में मदद करता है। - समीक्षा से
सिल्वरनाक

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

0

मैं नया हूं, Javascriptऔर बस इन कौशलों को सीखना शुरू कर दिया है। कृपया जांच लें कि पाठ को बदलने के लिए नीचे की विधि उपयोगी है या नहीं।

<script>

    var txt=document.getElementById("demo").innerHTML;
    var pos = txt.replace(/Hello/g, "hi")
    document.getElementById("demo").innerHTML = pos;

</script>

0

कभी-कभी बदलने से document.body.innerHTMLपृष्ठ पर कुछ JS स्क्रिप्ट्स टूट जाती हैं। यहाँ संस्करण है, जो केवल textतत्वों की सामग्री बदलता है :

function replace(element, from, to) {
    if (element.childNodes.length) {
        element.childNodes.forEach(child => replace(child, from, to));
    } else {
        const cont = element.textContent;
        if (cont) element.textContent = cont.replace(from, to);
    }
};

replace(document.body, new RegExp("hello", "g"), "hi");
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.