본문 텍스트에서 단어 교체


94

HTML 본문 내에 배치 된 테이블 요소 내의 일반 텍스트를 대체하는 방법이 있습니까?

"hello"를 "hi"로 바꾸시겠습니까?

jQuery 없이 JavaScript 만 사용하십시오 .


좀 더 구체적으로 말씀해 주시겠습니까? 무엇을 교체하고 싶
— 습니까

본문에는 div가 있고 그 테이블 안에는 ( "hello")를 ( "hi")로 바꾸는 것과 같은 코드가 아닌 일부 일반 텍스트를 바꾸고 싶습니다.
— Wahtever

3
단어의 존재가 HTML에서 클래스 이름, 태그 이름 또는 아무것도 우연히 교체 한 경우 대부분의 솔루션은 아래의 모든 이벤트 및 전체 DOM 구조를 파괴
— 무하마드 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');

이것은 helloHTML 코드의 모든 인스턴스 (예 : 클래스 이름 등)를 포함하여 본문 전체 의 첫 번째 인스턴스를 대체 하므로주의하여 사용하십시오. 더 나은 결과를 얻으려면 다음을 사용하여 코드를 대상으로 지정하여 대체 범위를 제한하십시오. 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;가 아니라 ü인지 확인 하시겠습니까? 예를 들어 ..?
— Dexter 2011

2
내 코드를 정확하게 복사하지 않았습니다. ;-) 문장의 양쪽에 innerHTML이 있는지 확인하십시오. 예 : document.body.innerHTML = document.body.innerHTML.replace ( 'ü', 'n');
— Dexter 2011

3
참고로-첫 번째 주석의 버그 window.onload = clear;는 괄호 "()"없이 설정 됩니다. 작성 clear()하면 실제로 함수를 실행하지만 onload-handler에만 함수를 할당하려고합니다
— Philipp

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

그러나 태그, 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

첫 번째 입력 매개 변수에 태그 이름을 추가하기 만하면됩니다. 예 : replaceText ( 'p, span', 'hello', 'hi')
— Ziad

이것은 올바르게 작동하지 않습니다. 다음을 고려하세요. <p> 안녕하세요 <strong> 세계 </ strong> </ p>. hello는 대체되지 않습니다.
— David Vielhuber

안녕하세요 저는 코딩 초보자입니다. AppleScript로 좋은 일을 할 수 있습니다. 하지만 그게 내가 아는 전부입니다. 제 목적은 데이터베이스, 이미지, 비디오, 웹 양식 작성, 업로드를 자동화하기 위해 자바 스크립트를 사용하는 것입니다. Applescript는 괜찮지 만 Java는 완전히 새로운 수준이며 훨씬 더 나은 것 같습니다. 내 목적을 달성하려면 무엇부터 시작해야합니까? 나는 자바 스크립트에 대해 0을 알고 있으며 위의 스크립트를 작동시키는 방법도 모릅니다! 어디에 붙여 넣어야하나요? 감사합니다!
— Duy Duy

11

부작용없이 텍스트를 안전하게 대체하기 위해이 기능을 사용했습니다 (지금까지).

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로 좋은 일을 할 수 있습니다. 하지만 그게 내가 아는 전부입니다. 제 목적은 데이터베이스, 이미지, 비디오, 웹 양식 작성, 업로드를 자동화하기 위해 자바 스크립트를 사용하는 것입니다. Applescript는 괜찮지 만 Java는 완전히 새로운 수준이며 훨씬 더 나은 것 같습니다. 내 목적을 달성하려면 무엇부터 시작해야합니까? 나는 자바 스크립트에 대해 0을 알고 있으며 위의 스크립트를 작동시키는 방법도 모릅니다! 어디에 붙여 넣어야하나요? 감사합니다!
— Duy Duy

Duy Duy, 그것은 많은 문제입니다. 작업 설명만으로도 작업을 그만 둘 이유가됩니다.
— funky-future

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

기본 자바 스크립트 문자열 바꾸기 기능 사용

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

1

위의 제안 된 솔루션을 매우 큰 문서에 적용하여 innerHTML 또는 innerText에있을 수있는 매우 짧은 문자열을 대체하면 html 디자인이 기껏해야 손상됩니다.

따라서 먼저 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
이것은 새로운 질문이 아니며 작동하는 예제를 제공하여 funky-future의 답변을 확장했습니다. 나는 그의 의견에 대한 담당자가 부족한 BC 새 답변을 게시해야했습니다.
— Y Stroli

1

때때로 변경 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");

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.