Singleton javascript appendChild

Singleton javascript appendChild

本文关键字:appendChild javascript Singleton      更新时间:2023-09-26

我想在DIV标签中插入DIV标签;

我有一个主DIV标签,我需要在主DIV标签内插入许多DIV标签;

我想开发一个CHAT,所以最新的DIV标签,必须在所有旧的DIV标签之前,用玩家发送的文本;

我使用了singleton javascript模式;

所有新的DIV标签,必须插入id为chat_messages的DIV标签

我试图使用这个elem[0].appendChild(div);,但它不工作;

使用elem[0].appendChild(div);

插入新的DIV标签失败

使用elem[0].appendChild(div);,它插入DIV标签,但它将始终是最后一个DIV;

下面是我在控制台测试功能的方法:Filcai.outBound('message');

<div id="chat" style="padding:10px 10px;background-color:#eeeeee;margin:10px 10px;">
    <div>CHAT</div>
    <div>
        <input id="chat_message" type="text" name="chat_message" />
    </div>
    <div id="chat_messages">
        <div>
            message 2
        </div>
        <div>
            message 1
        </div>
    </div>
</div>
<script type="text/javascript">
    var FilcaiClass = FilcaiClass ? FilcaiClass : function() {
        var f = function()
        {
            if (1 == 1) {
                console.log('1==1');
            }
        };
        function div1(displayTarget, div_id)
        {
            console.log('div1');
        }
        ;
        function createElementScript(src)
        {
            var script = document.createElement("script");
            script.type = 'text/javascript';
            script.src = src;
            //console.log("SRC: "+src);
            var header = document.getElementsByTagName("head");
            header[0].appendChild(script);
        }
        ;
        function create_message()
        {
            var div = document.createElement('div');
            div.innerText = 1;//document.getElementById('chat_message').value;
            var elem = document.getElementById('chat_messages');
            elem[0].appendChild(div);
        }
        ;
        f.prototype = {
            init: function() {
                console.log('init');
            },
            inBound: function(action, data)
            {
                try {
                    if (parseInt(data.code) < 0) {
                        alert('Internal error!');
                        return;
                    }
                    switch (action)
                    {
                        case 'message':
                            console.log('inBound message');
                            break;
                        default:
                            alert('Unknown inBound action: ' + action);
                            break;
                    }
                } catch (err) {
                    alert('Something went wrong, server returned invalid message!');
                }
            }, //end f inBound()
            outBound: function(action)
            {
                try {
                    switch (action)
                    {
                        case 'message':
                            create_message();
                            console.log('outBound message');
                            break;
                        default:
                            alert('Unknown outBound action: ' + action);
                            break;
                    }//end switch
                }
                catch (err) {
                    alert('Something went wrong, couldn''t prepare data!');
                }

            }//end f outBound()
        }
        return f;
    }();
    var Filcai = new FilcaiClass();
    Filcai.init();
</script>
document.getElementById('chat_messages');

只返回一个元素,您不必使用[0]

要在开始处包含子元素,可以使用insertBefore:

elem.insertBefore(div, elem.firstChild);

您没有说关于它不工作,但是仅仅浏览这些行是可疑的:

var elem = document.getElementById('chat_messages');
elem[0].appendChild(div);

这里有两个问题:

  1. getElementById返回元素,而不是列表,因此不需要[0]

  2. appendChild 添加到元素的结尾。如果你想让你的新div在顶部,你需要在顶部插入它,你可以通过insertBefore:

:

elem.insertBefore(div, elem.firstChild);

(不要担心如果elem是空的开始,elem.firstChild将是nullinsertBefore正确处理)