javascript - jQuery/JavaScript : How to prepend elements without going back to the top of last prepended element?

标签 javascript jquery css html

每当我单击 prepend 时,在所有元素都被添加到前面之后,聊天区域的 View 会切换到聊天区域的顶部或最后一个添加的元素。这与 append 不同,后者在追加所有元素后,聊天区域的 View 不会切换到聊天区域的末尾或最后追加的元素,但仍保持不变在其先前的位置。

如何使 prepend 函数以与 append 相同的方式运行,聊天区域的 View 不会改成类似FB的load previous message功能?

这是一个示例代码,可以说明我的意思。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script type="text/javascript" src="http://maxcdn.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
</head>
<style type="text/css">
    .chatbox{
        border:1px solid #2a6496;
        height: 600px;
        margin-top:50px;
    }
    .chatbox div{
        height: 100%;
    }
    .rightP{
        border-left: 1px solid #2a6496;
    }
    .rightP .contents{
        border-bottom: 1px solid #2a6496;
        height: 70%;
    }
    .rightP .send{
        padding : 5% 5% 5% 5%;
        height: 30%;
    }

    #response{
        height: 200px;
        overflow-y: scroll;
        overflow-wrap: break-word;
    }

</style>
<script>
    function appendMessage()
    {
        var data = 'hello';
        var message = document.createElement('p');
        message.innerHTML = data;
        console.log(message.innerHTML);
        $('#response').append(message);
        $('#response').append($('.load'));
    }
    function prependMessage()
    {
        for(var $i = 0;$i<10;$i++)
        {
            var data = 'hello'+$i;
            var message = document.createElement('p');
            message.innerHTML = data;
            console.log(message.innerHTML);
            $('#response').prepend(message);
            $('#response').prepend($('.load2'));
        }
    }
</script>
<body>
<div class="container">
    <div class="chatbox">
        <div class="col-sm-8 rightP">
            <div class="row contents">
                <div class="row msg">
                    <div id="response" class="msg form-group">
                        <a onclick="return appendMessage()" class="load btn btn-default">Append</a>
                        <a onclick="return prependMessage()" class="load2 btn btn-default">Prepend</a>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
</html>

最佳答案

在 HTML 中,您的 onlick 中应该有 return:

<a onclick="return loadMessage();" class="load btn btn-default">Load More Msg</a>

在 JS 中,您需要将 return false 添加到您的函数 loadMessage 中。

var loadMessage = function(){
    var firstMessage = $messagesWrapper.find('> p:nth-child(2)');
    $.ajax({
        ....
        if(messages.length<10){
                   $('.load').hide();//hide the load button if remaining messages to load is <10
                }
        success: function(messages){
            $.each(messages, function() {
               prependMessage(this);
           });
       },
       ....
   });

   return false;
};

关于javascript - jQuery/JavaScript : How to prepend elements without going back to the top of last prepended element?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24157560/

相关文章:

javascript - 如何在 IE 6 中仅在某一特定 DIV 上启用悬停功能?

jquery - 页面 peal z-index 问题?

javascript - 停止页面滚动到指定的 Div(或页脚元素)

javascript - 左侧的文本溢出省略号

css - Safari 6 渐变颜色混合/插值错误

javascript - 在 meteor 中制作计算器

javascript - YUI 测试错误 : window. getYUITestResults()

javascript - 将 CSS attr() 与样式化组件一起使用

javascript - knockout ko.observableArray 不会刷新 View

javascript - 如何使用 jquery 或 javascript 按退格键删除图像或在移动设备中删除图像