2016-07-29 5 views
1

クラスが存在する場合、p要素にテキストを追加しようとしています。私は以下のことがうまくいくと確信していただろうが、なんらかの理由で$(this)が私が期待していたものとは異なって読まれている。おそらく、jQueryがどのように設定されているかが原因です。クラスが存在する場合、テキストを付加する

私は、コンソールで$(this)を表示すると、関数がであることをオブジェクトを示しているTest This is gone

を読むためpテキストをしたいと思います。

私はこの

ようになります HTMLを持っています
<div class="place-holder"> 
    <p class="place gone">Test</p> 
</div> 

jQueryの

var app = app || {}; 
!function(){ 
    app.test = { 
     init: function () { 
      if($('.place').hasClass("gone")){ 
       console.log($(this)); 
       $(this).append('This is gone'); 
      } 
     } 
    } 

$(document).ready(app.test.init); 
}(jQuery); 

誰もが考えている?

+4

を使用する必要があります 'this'は、あなたがそれを考えるものではありません私は知っている – adeneo

+0

です!奇妙な!なぜ私は 'hasClass'を使ったのですか? –

+1

これは 'this'が関数スコープであるため、魔法のように関数なしで次の行の要素になることはありません – adeneo

答えて

2

あなただけ行うことができるはず:

また
$('.place.gone').append('This is gone'); 

、入力はおそらく(HTMLを含む)、悪意のあることができれば、あなたが追加するdocument.createTextNode()を使用する必要があります。

$('.place.gone').append(document.createTextNode('This is gone')); 

$(this)は通常指し、あなたが作業している要素に戻りますが、この場合、init関数からthisを取得しようとしています(呼び出し元がわからないので、何ができるのか分かりません)

私はあなたがおそらくこのような何かを考えていると思う:

$('.place').forEach(function() { 
    //In this case, forEach assigns the element to the 'this' variable. 
    if ($(this).hasClass("gone")) { 
     console.log($(this)); 
     $(this).append('This is gone'); 
    } 
} 
+0

賢い!私はそれが好きです!まだ '$(これ)'が私の思うところと違う理由を知りたいです! –

+0

私は答えを – FrankerZ

+0

@phantomに読んでもらうことなく更新しました。 – Jamiec

0

ない限り、あなたはHTMLを持っている必要があります追加されているテキストが、あなたが

$('.place.gone').append(document.createTextNode('Hello World')); 
関連する問題