2016-07-29 4 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(document.createTextNode('This is gone')); 

$(this)는 일반적 의미 : 입력이 가능 (HTML을 포함하는), 당신은 추가 할 document.createTextNode()를 사용해야 악성 수 있다면,

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

또한 당신이 작업하고있는 요소에,이 경우에는, init 함수로부터 을 얻으려고하고있다. (우리는 호출자를 알지 못하기 때문에 그것이 무엇인지 모를 것이다.)

난 당신이 아마 이런 식으로 뭔가에 대해 생각하고 생각 :

$('.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

영리한! 나는 그것을 좋아한다! 아직도'$ (this)'이 내가 생각하는 것과 다른 이유를 알고 싶다! –

+0

나는 내 대답 – FrankerZ

+0

을 마음에 들지 않으면 서 업데이트했다. 우리는 "당신 생각"을 알지 못한다. – Jamiec

0

하지 않는 한 당신이 HTML을해야 추가되는 텍스트, 당신은

$('.place.gone').append(document.createTextNode('Hello World')); 
관련 문제