2016-07-29 2 views
1

Я пытаюсь добавить текст в элемент p, если класс существует. Я был бы уверен, что ниже будет работать, но по какой-то причине $(this) читается по-другому, что я ожидал. Возможно, это связано с тем, как настроен jQuery.apend текст, если класс существует jQuery

Я хотел бы p текст читать Test This is gone

При просмотре $(this) в консоли он показывает объект, что функция находится.

У меня есть 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' не то, что вы думаете, это is – 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) обычно относится к элементу, с которым вы работаете, но в этом случае вы пытаетесь получить this из функции 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

умный! мне это нравится! все еще хочу знать, почему '$ (это)' отличается от того, что я думаю! –

+0

Я обновил свой ответ – FrankerZ

+0

@phantom, не будучи сознателем, мы не можем знать «что вы думаете». – Jamiec

0

Если текст вы добавления должны иметь HTML, вы должны использовать

$('.place.gone').append(document.createTextNode('Hello World')); 
Смежные вопросы