通过.text()存储变量不是最新的

时间:2016-04-26 14:18:16

标签: javascript jquery

我在div中有<span>个标记,当用户点击它们时会将其删除。工作正常。

我想将.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);

    });
});

3 个答案:

答案 0 :(得分:4)

获取新文本的代码应该移到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 :(得分:1)

我尝试在chrome中调试你的jsfiddle,看起来代码的优先级是这样的:

  1. 声明此活动 - jQuery(this).fadeOut(function(){

  2. 获取div var content = jQuery(this).parent().parent().find('.hello').text();的当前数据。

  3. 不加更改地提醒您的数据。

  4. 调用fadeout的功能
  5. 我认为你所要做的就是从你的匿名fadeout函数中调用你的警报和2

答案 2 :(得分: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);
  }
});