jquery를 사용하여 div 내의 텍스트 만 교체


104

다음과 같은 div가 있습니다.

<div id="one">
       <div class="first"></div>
       "Hi I am text"
       <div class="second"></div>
       <div class="third"></div>
</div>

jquery를 사용하여 "Hi I am text"에서 "Hi I am replace"로 텍스트 만 변경하려고합니다. 쉬울 수도 있지만 할 수 없습니다.

사용 $('#one').text('')하면 전체 #Onediv가 비워집니다 .



$ ( '# one'). find ( '. first'). text ( 'Hi I am replace'); 사용 $ ( '# one'). text (); 대신 또는 $ ( '. first'). text ( 'Hi I am replace');를 사용하여 요소에 직접 액세스하고 텍스트를 바꿀 수 있습니다.
Kartik Chauhan

답변:


134

텍스트는 그 자체가 아니어야합니다. span요소에 넣으십시오 .

다음과 같이 변경하십시오.

<div id="one">
       <div class="first"></div>
       <span>"Hi I am text"</span>
       <div class="second"></div>
       <div class="third"></div>
</div>
$('#one span').text('Hi I am replace');

51
이것은 그들이 HTML을 제어 할 수 있다고 말하지 않은 OP의 질문에 대한 대답이 아닙니다.
tar

1
이것은 작동하지만 어떻게 실행되는지 여부를 확인할 수 있습니까? 비어 있거나 태그가 변경된 경우 예외를 실행할 수 있습니까? 이 div가 REST 또는 데이터베이스에서 code.from에 의해 생성 되었기 때문에 실패한 바인딩에서
saber tabatabaee yazdi

122

텍스트 노드 ( nodeType==3)를 찾아 다음을 바꿉니다 textContent.

$('#one').contents().filter(function() {
    return this.nodeType == 3
}).each(function(){
    this.textContent = this.textContent.replace('Hi I am text','Hi I am replace');
});

라이브 예 : http://jsfiddle.net/VgFwS/


6
정말 좋은 대답입니다!
wcolbert

6
이것은 html을 변경할 필요가 없기 때문에 받아 들여진 대답이어야합니다!
Wouter Rutgers

2
@Jamiec FWIW 마크 업 / 스크립트 등을 지루하게 만들지 않고 교체 할 수 있기 때문에이 답변이 마음에 듭니다.
sehe

3
이것은 나를 위해 완벽하게 작동했습니다. 때때로 우리는 HTML (예 : SharePoint) 변경을 허용하지 않는 상황에서 작업합니다. 감사합니다
Mark P.

14

텍스트를 빈 문자열이 아닌 다른 것으로 설정해야합니다. 또한 .html () 함수는 div의 HTML 구조를 유지하면서이를 수행해야합니다.

$('#one').html($('#one').html().replace('text','replace'));

이 경우에는 작동하지만 "first"라는 단어를 "second"라는 단어로 바꾸거나 'i'만 ''로 바꾸면 태그가 엉망이 될 것이기 때문에이 옵션이 마음에 들지 않습니다.
JSON

10

대체 할 텍스트를 실제로 알고 있다면 다음을 사용할 수 있습니다.

$('#one').contents(':contains("Hi I am text")')[0].nodeValue = '"Hi I am replace"';

http://jsfiddle.net/5rWwh/

또는

$('#one').contents(':not(*)')[1].nodeValue = '"Hi I am replace"';

$('#one').contents(':not(*)') 이 경우에는 요소가 아닌 자식 노드를 선택하고 두 번째 노드는 우리가 교체하려는 노드입니다.

http://jsfiddle.net/5rWwh/1/


2
From jQuery 1.8.3 $('#one').contents(':not(*)')은 아무것도 선택하지 않습니다.
BruceHill 2014 년

0

또 다른 방법은 해당 요소를 유지하고 텍스트를 변경 한 다음 해당 요소를 다시 추가하는 것입니다.

const star_icon = $(li).find('.stars svg')
$(li).find('.stars').text(repo.stargazers_count).append(star_icon)

0

HTML을 변경할 수없는 경우를 대비하여. 매우 원시적이지만 짧고 작동합니다. (부모 div가 비워 지므로 하위 div가 제거됩니다)

$('#one').text('Hi I am replace');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="one">
  <div class="first"></div>
  "Hi I am text"
  <div class="second"></div>
  <div class="third"></div>
</div>


1
이 #one의 자식 div를 모두 제거
스콧 네리에게

1
@ScotNery 감사합니다. 답변을 업데이트했습니다. (기술적 으로이 특정 질문에 대한 답변이지만) ID가있는 태그로 텍스트를 래핑하는 것 외에는 매우 어려울 것이라고 가정합니다. 다른 한 가지는 교체 할 문자열을 일치시키는 것이지만 정말 깨지기 쉽습니다.
ReturnTable
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.