为什么我的jQuery不更新DOM?

时间:2014-12-03 05:24:42

标签: javascript jquery html css

好的,我正在为一个应用程序创建一个登录界面,其中有一个按钮,上面写着" Not You?"单击时,会弹出一个文本框来更新屏幕上的用户名。我遇到的问题是:用户名更新一次,但再次尝试时无法正常工作。我的jQuery有什么问题?

这是我的jQuery:

var main = function(){
$('.not').click(function(){
    $('.login-wrap').fadeOut(300, function(){
        $('.not-you').fadeIn(300); 
    });
});

$('.enter').click(function(){
    $('.name').replaceWith($('.new-input').val());
    $('.not-you').fadeOut(300, function(){
        $('.login-wrap').fadeIn(300);
    });
  });
}

$(document).ready(main);

HERE'S指向CodePen的链接。

谢谢!

3 个答案:

答案 0 :(得分:2)

docs开始,.replaceWith()方法会从DOM中删除内容并通过一次调用在其位置插入新内容,因此第一次它正常工作但第一次{{1使用它将整个.replaceWith()替换为类'.new-input',这就是为什么之后它会产生问题。

而不是

'name'

尝试

$('.name').replaceWith($('.new-input').val());

OR

$('.name').html($('.new-input').val());

see here.

答案 1 :(得分:1)

当您执行replaceWith()时,实际上是使用类'.name'删除整个标记。 因此,在下一次代码无法找到任何具有类'name'的对象时。

使用'.html()'使其正常工作。

答案 2 :(得分:0)

您可以使用以下内容更改replaceWith()行:

$('.name').replaceWith("<span class='name'>"+$('.new-input').val()+"</span>");

replaceWith()实际上替换了具有name类的整个DOM元素。

.replaceWith() | jQuery API Documentation