本文の単語を置き換える


94

HTMLの本文内に配置されているテーブル要素内の通常のテキストを置き換える方法はありますか?

「hello」を「hi」に置き換えるのはどうですか?

jQueryなしのJavaScriptのみを使用してください。


もっと具体的に教えていただけますか?何を交換しますか、それは体内のどこにありますか
Zirak

本文にdivがあり、その中にテーブルがある場合、( "hello")を( "hi")に置き換えるようなコードではなく、通常のテキストを置き換えたい
Wahtever

3
以下のほとんどの解決策は、置き換えられる単語が偶然クラス名、タグ名、またはhtmlの何かである場合、すべてのイベントとdom構造全体を破壊します
Muhammad Umer

質問と回答の両方が間違っているようです。文字ではなく単語を置き換える方法を尋ねます。このような交換がhello, this is a text randomTexthello必要ですhi, this is a text randomTexthello。ただし、他のすべての回答は、ここでは単語の代わりに文字を置き換えます。
Orhun Alp Oral

回答:


139

HTMLの文字列を別の文字列に置き換えるには、innerHTMLのreplaceメソッドを使用します。

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

これはhello、HTMLコード内のインスタンス(クラス名など)を含む、本文全体の最初のインスタンスを置き換えるため、注意して使用してください。より良い結果を得るには、document.getElementByIdまたは同様のもの。

ターゲット文字列のすべてのインスタンスを置き換えるには、globalフラグを指定した単純な正規表現を使用します。

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
あなたは私のコードを正確にコピーしませんでした;-)ステートメントの両側にinnerHTMLがあることを確認してください。つまり、次のようにします。
デクスター

3
参考:最初のコメントのバグは、window.onload = clear;括弧「()」なしで設定されています。作成clear()すると、実際には関数を実行しますが、関数をonload-handlerに割り当てたいだけです
Philipp

1
最近、innerHTMLの使用は一般的に悪いと見なされていることに注意してください。slideshare.net
x00mario

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

ただし、タグ、CSS、スクリプトにも影響を与える可能性があるため、注意してください。

編集: 純粋なJavaScriptソリューションについては、代わりにこのメソッドを使用してください:

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 2017

最初の入力パラメータにタグ名を追加するだけです。たとえば、replaceText( 'p、span'、 'hello'、 'hi')
Ziad

これは正しく機能しません。これを検討してください:<p> hello <strong> world </ strong> </ p>。こんにちは置き換えられません。
David Vielhuber

こんにちは、私はコーディングの初心者です。私はAppleScriptを使っていくつかの良いことができます。しかし、私が知っているのはそれだけです。私にいくつかのアドバイスを教えてもらえますか、何から始めるべきか、私の目的はjavascriptを使用してデータベース、画像、ビデオの収集、Webフォームへの入力、アップロードを自動化することです。Applescriptは問題ありませんが、Javaはまったく新しいレベルで、はるかに優れているようです。目的を達成するために何から始めるべきか。私はjavascriptについて0を知っていますが、上記のスクリプトを機能させる方法すら知りません!どこに貼り付けると思いますか?どうもありがとうございます!
Duy Duy

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を使っていくつかの良いことができます。しかし、私が知っているのはそれだけです。私にいくつかのアドバイスを教えてもらえますか、何から始めるべきか、私の目的はjavascriptを使用してデータベース、画像、ビデオの収集、Webフォームへの入力、アップロードを自動化することです。Applescriptは問題ありませんが、Javaはまったく新しいレベルで、はるかに優れているようです。目的を達成するために何から始めるべきか。私はjavascriptについて0を知っていますが、上記のスクリプトを機能させる方法すら知りません!どこに貼り付けると思いますか?どうもありがとうございます!
Duy Duy

Duy Duy、それは多くの問題です。タスクの説明だけを考えると、仕事を辞めるのに十分な理由があります。
ファンキーな未来

9

私も同じ問題を抱えていました。私はinnerHTMLのreplaceを使用して独自の関数を記述しましたが、アンカーリンクなどをめちゃくちゃにしてしまいます。

これを正しく機能させるために、ライブラリーを使用してこれを実行しました。

ライブラリには素晴らしいAPIがあります。スクリプトを含めた後、次のように呼び出しました。

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

これが私の問題に対して有効な唯一のソリューションでした。REGEXを使用してサイト全体の電話番号を検索および置換する必要があり、ここでの他の回答はDOMイベントを壊しました。
DavyH

3

私は本当に大きな文字列を置き換えようとしており、何らかの理由で正規表現がいくつかのエラー/例外をスローしていました。

だから私は正規表現のこの代替手段を見つけましたが、これもかなり高速に実行されます。少なくともそれは私には十分な速さでした:

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

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

src:JavaScript内のすべての文字列を置き換える方法は?


2

デフォルトのJavaScript文字列置換関数を使用する

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

1

上記の提案されたソリューションをかなり大きなドキュメントに適用して、innerHTMLまたはinnerTextに存在する可能性のあるかなり短い文字列を置き換えてみてください。

したがって、私はまず、このようにHTML DOMノードを介してテキストノード要素のみを取得します

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

funky-futureの答えに例を追加したかったので、私はこのエラーを受け取り続けました:

Uncaught TypeError: element.childNodes is not iterable

次のように使用します:

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

jQueryセレクターでは機能しませんでした。


1
新しい質問がある場合は、[ 質問する ]ボタンをクリックして質問してください。コンテキストの提供に役立つ場合は、この質問へのリンクを含めます。- レビューより
SilverNak

1
これは新しい質問ではありません。私は機能する例を提供することにより、ファンキーフューチャーの答えを拡張していました。新しいコメントを投稿しなければなりませんでした。
Y Stroli

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");
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.