2016-04-26 13 views
4

<span>タグは、ユーザーがクリックすると削除されるdiv内にあります。正常に動作します。.text()経由で変数を保存することはできません

変数内に.text()をdiv内に格納したいとします。問題は、更新されたのが保存されないということです。

これを削除するには、jsFiddleの単語をクリックしてください。

ご覧のとおり、content変数は、新しいテキストではなく古いテキストを返します。

更新されたテキストで変数を保存するにはどうすればよいですか?

のjQuery:

jQuery(document).ready(function() { 

    jQuery(document).on("mousedown", ".hello span", function() { 

     // don't add full stop at the end of sentence if it already ends with 
     var endChars = [".", "?", "!"]; 

     jQuery(this).fadeOut(function(){ 
      var parentObj = jQuery(this).parent(); 
      jQuery(this).remove(); 
      var text = parentObj.find("span").first().html(); 
      parentObj.find("span").first().html(ta_capitalizeFirstLetter(text)); 
      text = parentObj.find("span").last().html(); 
      if (endChars.indexOf(text.slice(-1)) == -1) 
      { 
       parentObj.find("span").last().html(text+"."); 
      } 
     }); 

     var content = jQuery(this).parent().parent().find('.hello').text(); 

     alert(content); 

    }); 
}); 
+2

私は質問を理解しようとしています。デモの各クリックで何が起こるべきかを追加できますか? – Tushar

+1

@ Tusharかなり簡単です。 jsFiddleで 'lorem'という単語をクリックすると、アラートボックスに' Hello world lorem'ではなく 'Hello world'が表示されます。それは理にかなっていますか?それは変数 'content'の誤りです。 –

+0

私はこのエラーを受け取りました.Uncaught ReferenceError:ta_capitalizeFirstLetterは定義されていません。 –

答えて

4

コードのあなたの無名関数からのアラートと2を呼び出すことだと思いますfadeOutコールバックアニメーションが完了し、要素が削除されると、親要素のinnerTextが更新されます。現時点では、更新されたコンテンツをDOMから読み取る必要があります。

Demo

// Cache the element 
var $el = jQuery(this).parent().parent().find('.hello'); 

jQuery(this).fadeOut(function() { 
    jQuery(this).remove(); 
    // Irrelevant code removed from here 
    ... 

    var content = $el.text(); 
    alert(content); 
}); 

ここでは、より良いコードを理解するのに役立ちます、最小限のコードで別の簡単なデモです。

Demo

1

私はクロームであなたのjsfiddleをデバッグしようとした、そしてあなたのコードの優先順位は次のようであるように見えます:このイベントに

  1. 宣言 - jQuery(this).fadeOut(function(){

  2. var content = jQuery(this).parent().parent().find('.hello').text();の現在のデータを取得します。

  3. 変更なしでデータに警告します。

  4. フェードアウト

のfuncntionを呼び出す私は、あなたがしなければならないすべては内側に移動しなければならない新しいテキストを取得するためにフェードアウト

1

ただ、コールバック内でアラートを置く:

jQuery(this).fadeOut(function(){ 
    var parentObj = jQuery(this).parent(); 
    jQuery(this).remove(); 
    var text = parentObj.find("span").first().html(); 
    parentObj.find("span").first().html(ta_capitalizeFirstLetter(text)); 
    text = parentObj.find("span").last().html(); 
    if (endChars.indexOf(text.slice(-1)) == -1) { 
    parentObj.find("span").last().html(text+"."); 
    var content = parentObj.parent().find('.hello').text(); 
    alert(content); 
    } 
}); 
関連する問題