14

奇妙な事態が発生します。私は<h3>それにテキストを持っています。このテキストを .text() で抽出し、これを a に入れると<textarea>、テキストが 2 回表示されます。

ここにjsFiddleがあります。

HTML

<h3 class="profileRightAboutMeText">Heya, this is all the text.</h3>     
<textarea class="profileRightAboutMeTextarea"></textarea>

Jクエリ

$(document).on('click','h6.editMyProfileSection', function() {
  var originalText = $('h3.profileRightAboutMeText').text();

  $('h3.profileRightAboutMeText').fadeOut('fast', function() {
    $('textarea.profileRightAboutMeTextarea').text(originalText).fadeIn('fast');
  });
  alert(originalText);
});

警告と<textarea>表示の両方で、次のようにテキストが二重に表示されます。

やあ、これはすべてのテキストです。ねえ、これはすべてのテキストです。

4

3 に答える 3

16

ページに $('h3.profileRightAboutMeText') に一致する 2 つの要素があると思います。

ここで確認できます: http://jsfiddle.net/KwcGB/は、余分な h3.profileRightAboutMeText を html に追加したため、テキストが 2 回表示されますが、余分な行が削除されると、1 回だけ表示されます。

$('h3.profileRightAboutMeText') を firebug のコンソールに入力して、一致する要素の数を確認してみてください...

于 2012-09-03T11:47:08.413 に答える
12

JQuery はtext()、複合パスによってアドレス指定される重複の場合、メソッドの動作が異なります。

たとえば、

<div id=b class="a">2</div>
<div id=b class="a">3</div>

それで

var val1 = $("#b").text()
var val2 = $("#b.a").text()

// val1 = 2
// val2 = 23

この問題を回避するには、確実に .first() を使用してください

var val3 = $("#b.a").first().text()

// val3 = 2
于 2014-08-19T12:21:03.960 に答える
1

フォーム要素の場合は、val()代わりに使用する必要がありますtext():

$("textarea.profileRightAboutMeTextarea").val(originalText)

さらに、 class を持つ要素の重複があるかどうかを確認してくださいprofileRightAboutMeText

于 2012-09-03T11:41:17.340 に答える