শরীরের পাঠ্যে শব্দগুলি প্রতিস্থাপন করুন


94

এইচটিএমএল এর শরীরে স্থাপন করা কোনও টেবিল উপাদানটির মধ্যে কি সাধারণ পাঠ্য প্রতিস্থাপনের কোনও উপায় আছে?

"হ্যালো" কে "হাই" দিয়ে প্রতিস্থাপন করার মতো?

দয়া করে কেবল jQuery ছাড়াই জাভাস্ক্রিপ্ট ব্যবহার করুন ।


আপনি কি আরও নির্দিষ্ট হতে পারেন? আপনি কি প্রতিস্থাপন করতে চান, যেখানে এটি শরীর, ইত্যাদি রয়েছে
Zirak

দেহের একটি ডিভ রয়েছে এবং তার মধ্যে একটি টেবিল রয়েছে, তারপরে আমি কিছু সাধারণ পাঠ্য কোডটি পরিবর্তনের মতো চাই না ("হ্যালো") এর পরিবর্তে ("হাই")
ওয়াহেটিভার

4
নীচের বেশিরভাগ সমাধানগুলি সমস্ত ইভেন্ট এবং পুরো ডোম কাঠামোকে ধ্বংস করে দিবে যদি শব্দটি প্রতিস্থাপন করা হয় শ্রেণীর নাম, ট্যাগের নাম বা এইচটিএমএল
মুহাম্মদ উমর

দেখে মনে হচ্ছে প্রশ্ন এবং উত্তর দুটিই ভুল। এটি চরিত্রগুলি নয় এবং কীভাবে শব্দগুলি প্রতিস্থাপন করবে তা জিজ্ঞাসা করে। যেমন এটি প্রতিস্থাপন করা hello, this is a text randomTexthelloউচিত hi, this is a text randomTexthello। যাইহোক, অন্য সমস্ত উত্তর এখানে শব্দের পরিবর্তে অক্ষর প্রতিস্থাপন করছে।
অরহুন আল্প ওরাল

উত্তর:


139

অন্য ব্যবহারের সঙ্গে আপনার HTML এ একটি স্ট্রিং প্রতিস্থাপন করতে প্রতিস্থাপন উপর পদ্ধতি innerHTML :

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

নোট করুন যে এটি helloআপনার এইচটিএমএল কোডের কোনও উদাহরণ (যেমন শ্রেণীর নাম ইত্যাদি including সহ ) সারা শরীরের প্রথম স্থানটিকে প্রতিস্থাপন করবে , তাই সতর্কতার সাথে ব্যবহার করুন - ভাল ফলাফলের জন্য আপনার কোডটি লক্ষ্য করে আপনার প্রতিস্থাপনের সুযোগকে সীমাবদ্ধ করার চেষ্টা করুন document.getElementById বা অনুরূপ।

লক্ষ্য স্ট্রিংয়ের সমস্ত দৃষ্টান্ত প্রতিস্থাপন করতে, gলোবল পতাকা সহ একটি সাধারণ নিয়মিত অভিব্যক্তি ব্যবহার করুন :

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

4
আমার জন্য এখানে কাজ হয়নি যা আমি ব্যবহার করেছি <script type="text/javascript"> window.onload = clear(); function clear() { document.body.innerHTML = document.body.replace('ü', 'n'); } </script>
ওয়াহেটিভার

এটি বর্ধিত অক্ষরগুলির সাথে আরও জটিল হতে পারে - আপনার নথিতে কোন এনকোডিং রয়েছে? আপনি কি নিশ্চিত যে চরিত্রটি একটি ü, এবং & # 252 নয়; উদাহরণ স্বরূপ..?
ডেক্সটার

4
আপনি আমার কোডটি যথাযথভাবে অনুলিপি করেননি ;-) নিশ্চিত করুন যে আপনি বিবৃতিটির উভয় পক্ষের অভ্যন্তরীণ এইচটিএমএল পেয়েছেন, যেমন: document.body.innerHTML = document.body.innerHTML.replace ('ü', 'n');
ডেক্সটার

4
এফওয়াইআই - প্রথম মন্তব্যে বাগটি হ'ল: window.onload = clear;বন্ধনী "()" ছাড়াই সেট করুন । আপনি যখন লেখেন clear()তখন আপনি আসলে ফাংশনটি সম্পাদন করেন তবে আপনি কেবলমাত্র ভারটি হ্যান্ডলারের সাথে ফাংশনটি বরাদ্দ করতে চান
ফিলিপ

4
লক্ষ্য করুন 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>) তে অন্য কোনও পাঠ্যের সাথে সমস্ত পাঠ্য প্রতিস্থাপন করা যায়?
জিজেজেড

প্রথম ইনপুট প্যারামিটারে কেবল ট্যাগের নাম যুক্ত করুন যেমন প্রতিস্থাপন পাঠ্য ('পি, স্প্যান', 'হ্যালো', 'হাই')
জিয়াদ

এটি সঠিকভাবে কাজ করে না। এটি বিবেচনা করুন: <p> হ্যালো <<<<<<<<<<< </p> p হ্যালো প্রতিস্থাপন করা হয় না।
ডেভিড ভিলহুবার

হাই, আমি কোডিংয়ের শুরুর দিকে। আমি অ্যাপলস্ক্রিপ্ট দিয়ে কিছু ভাল করতে পারি। তবে এটাই আমি জানি। আপনি কি দয়া করে আমাকে কিছু পরামর্শ দিতে পারেন, কী দিয়ে শুরু করবেন, আমার উদ্দেশ্য হ'ল জাভাস্ক্রিপ্ট ব্যবহার করে ডেটাবেস, চিত্র, ভিডিও, ওয়েব ফর্মগুলি পূরণ করা, আপলোড করা স্বয়ংক্রিয় করতে এক্সেল সহ কাজ করা হতে পারে। অ্যাপসক্রিপ্ট এটির সাথে ঠিক আছে তবে জাভা সম্পূর্ণ নতুন স্তর এবং আরও অনেক ভাল বলে মনে হচ্ছে। আমার উদ্দেশ্যগুলি অর্জন করার জন্য আমার কী দিয়ে শুরু করা উচিত। আমি জাভাস্ক্রিপ্ট সম্পর্কে 0 জানি এবং আপনার স্ক্রিপ্টটি কীভাবে উপরে তৈরি করা যায় তা আমি জানি না! আমি কোথায় এটি আটকানো অনুমান করি? তোমাকে অনেক ধন্যবাদ!
দুয় দুয়

12

পার্শ্ব প্রতিক্রিয়া ছাড়াই নিরাপদে পাঠ্য প্রতিস্থাপন করতে এই ফাংশনটি শেষ করেছি (এতদূর):

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);
        }
    }
}

এটি এমন ক্ষেত্রে যেখানে 16 কিলোবাইট findAndReplaceDOMTextকিছুটা ভারী।


হাই, আমি কোডিংয়ের শুরুর দিকে। আমি অ্যাপলস্ক্রিপ্ট দিয়ে কিছু ভাল করতে পারি। তবে এটাই আমি জানি। আপনি কি দয়া করে আমাকে কিছু পরামর্শ দিতে পারেন, কী দিয়ে শুরু করবেন, আমার উদ্দেশ্য হ'ল জাভাস্ক্রিপ্ট ব্যবহার করে ডেটাবেস, চিত্র, ভিডিও, ওয়েব ফর্মগুলি পূরণ করা, আপলোড করা স্বয়ংক্রিয় করতে এক্সেল সহ কাজ করা হতে পারে। অ্যাপসক্রিপ্ট এটির সাথে ঠিক আছে তবে জাভা সম্পূর্ণ নতুন স্তর এবং আরও অনেক ভাল বলে মনে হচ্ছে। আমার উদ্দেশ্যগুলি অর্জন করার জন্য আমার কী দিয়ে শুরু করা উচিত। আমি জাভাস্ক্রিপ্ট সম্পর্কে 0 জানি এবং আপনার স্ক্রিপ্টটি কীভাবে উপরে তৈরি করা যায় তা আমি জানি না! আমি কোথায় এটি আটকানো অনুমান করি? তোমাকে অনেক ধন্যবাদ!
দুয় দুয়

ডু ডু, এটাই অনেক সমস্যা। একাকী কাজের বিবরণ দেওয়া, কাজটি ছাড়ার যথেষ্ট কারণ।
ফানকি-ভবিষ্যতের

9

আমারও একই সমস্যা ছিল। আমি অভ্যন্তরীণ এইচটিএমএল এ প্রতিস্থাপন ব্যবহার করে আমার নিজস্ব ফাংশন লিখেছি, তবে এটি অ্যাঙ্কর লিঙ্কগুলি এবং এ জাতীয় স্ক্রু আপ করতে পারে।

এটি সঠিকভাবে কাজ করার জন্য আমি এটি সম্পন্ন করতে একটি লাইব্রেরি ব্যবহার করেছি।

লাইব্রেরিতে একটি দুর্দান্ত API রয়েছে। স্ক্রিপ্ট অন্তর্ভুক্ত করার পরে আমি এটিকে এটি বলেছিলাম:

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

এটিই ছিল আমার সমস্যাটির জন্য একমাত্র সমাধান। পুরো সাইট জুড়ে ফোন নম্বরগুলি সন্ধান এবং প্রতিস্থাপনের জন্য আমার আরজিইএক্সএক্স প্রয়োজন ছিল এবং এখানে অন্যান্য উত্তরগুলি আমার ডোম ইভেন্টগুলিকে ভেঙে দেবে।
ডেভিএইচ

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

উপরের প্রস্তাবিত সমাধানটি বেশ বড় ডকুমেন্টে প্রয়োগ করার চেষ্টা করুন, অভ্যন্তরীণ এইচটিএমএল বা এমনকি অভ্যন্তর টেক্সটটিতে উপস্থিত থাকতে পারে এমন সুন্দর সংক্ষিপ্ত স্ট্রিংগুলি প্রতিস্থাপন করে এবং আপনার এইচটিএমএল ডিজাইনটি সেরাভাবে ভাঙা হয়েছে becomes

সুতরাং আমি প্রথমে এইচটিএমএল ডিওএম নোডের মাধ্যমে কেবল পাঠ্য নোড উপাদানগুলি পিকআপ করি

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 নির্বাচকদের সাথে আমার পক্ষে কাজ করে নি।


4
আপনার যদি নতুন প্রশ্ন থাকে তবে দয়া করে প্রশ্ন জিজ্ঞাসা বোতামটি ক্লিক করে এটি জিজ্ঞাসা করুন । যদি এই প্রসঙ্গে সরবরাহ করতে সহায়তা করে তবে এই প্রশ্নের একটি লিঙ্ক অন্তর্ভুক্ত করুন। - পর্যালোচনা থেকে
সিলভারনাক

4
এটি কোনও নতুন প্রশ্ন নয়, আমি কাজ করে এমন একটি উদাহরণ সরবরাহ করে মজার-ভবিষ্যতের উত্তরটি প্রসারিত করেছিলাম। একটি নতুন উত্তর বিসি পোস্ট করতে হয়েছিল তার মন্তব্য করার জন্য আমার কাছে কোন মন্তব্য নেই।
ওয়াই স্ট্রোলি

1

কখনও কখনও পরিবর্তনগুলি document.body.innerHTMLপৃষ্ঠায় কিছু জেএস স্ক্রিপ্টগুলি ভেঙে দেয়। এখানে সংস্করণ রয়েছে যা কেবলমাত্র 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");

0

আমি নতুন Javascriptএবং এই দক্ষতাগুলি শিখতে শুরু করেছি। নীচের পদ্ধতিটি পাঠ্য প্রতিস্থাপনের জন্য দরকারী কিনা দয়া করে তা পরীক্ষা করে দেখুন।

<script>

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

</script>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.