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 全体が空になります。


作るために役に立つかもしれませんフィドル
Inkbug

$( '#one')。find( '。first')。text( 'Hi I am replace');を使用します。$( '#one')。text();の代わりに または、要素に直接アクセスし、$( '。first')。text( 'Hi I am replace');を使用してテキストを置き換えることができます。
Kartik Chauhan 2017

回答:


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の質問には答えません。
タール

1
これはうまくいきましたが、どうやって確実に実行できるのか?空白またはタグが変更された場合に例外を実行できますか?このdivはRESTまたはデータベースから作成されたため、バインドは失敗しました
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 2013年

6
これは、htmlを変更する必要がないため、受け入れられる答えになるはずです。
Wouter Rutgers

2
それは、マークアップ/スクリプトなどをborkingを気にせずに交換することができますので、@Jamiec FWIW、私はこの答えを愛する
sehe

3
これは私にとっては完璧に機能しました。HTMLを変更できない状況(SharePointなど)で作業する場合があります。ありがとう
マーク

14

テキストを空の文字列以外のものに設定する必要があります。さらに、.html()関数は、divのHTML構造を維持しながらそれを行う必要があります。

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

これが、この場合に働くだろうが、あなたが「第二の」または単に「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(*)') この場合、非要素の子ノードを選択し、テキストノードを選択します。2番目のノードは、置き換えるノードです。

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


2
から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が削除されます
Scot Nery

1
@ScotNeryありがとう、私は答えを更新しました。(技術的にはこの特定の質問に答えますが)IDを持つタグでテキストをラップする以外は想定していますが、かなり難しいでしょう。他の唯一のものは、置き換える文字列を照合することですが、それは本当に壊れやすいものです。
ReturnTable
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.