본문 텍스트에서 단어 교체


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의 문자열을 다른 문자열로 바꾸려면 innerHTMLreplace 메서드를 사용하십시오 .

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.