Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在jQuery/JS中生成复杂html层次结构的最佳方法_Javascript_Jquery_Html - Fatal编程技术网

Javascript 在jQuery/JS中生成复杂html层次结构的最佳方法

Javascript 在jQuery/JS中生成复杂html层次结构的最佳方法,javascript,jquery,html,Javascript,Jquery,Html,我正在制作一个web应用程序,其中许多内容是由json在JS中生成的。我不知道怎么做才对,所以我只是生成复杂的html片段,就像字符串一样。这似乎不是最好的方法,因为它失去了普通html的许多优点:语法高亮显示、制表、每行后面加上符号: $('#chatlist').append( "<div class='chatlist_cell'>" + "<div class='chatlist_cell_inner'>" +

我正在制作一个web应用程序,其中许多内容是由json在JS中生成的。我不知道怎么做才对,所以我只是生成复杂的html片段,就像字符串一样。这似乎不是最好的方法,因为它失去了普通html的许多优点:语法高亮显示、制表、每行后面加上符号:

    $('#chatlist').append(
        "<div class='chatlist_cell'>" +
            "<div class='chatlist_cell_inner'>" +
                "<div style='float: left;'>" +
                    "<img class='chatlist_avatar' src='/images/ui/user_placeholder.svg'>" +
                "</div>" +
                "<div style='float: left; padding-left: 10px;'>" +
                    "<div class='chatlist_title'>" + title + "</div>" +
                    "<div class='chatlist_text'>" + fromUserString + message.text + "</div>" +
                "</div>" +
            "</div>" +
        "</div>"
    )
$('#聊天列表')。追加(
"" +
"" +
"" +
"" +
"" +
"" +
“”+标题+“”+
“”+fromUserString+message.text+“”+
"" +
"" +
""
)
今天,我在jQuery上也尝试了同样的方法,但结果更糟。理解起来要复杂得多

    $('#chatlist').append(
        $('<div />').addClass('chatlist_cell').append(
            $('<div />').addClass('chatlist_cell_inner').append(
                $('<div />').css('float', 'left').append(
                    $('<img />').addClass('chatlist_avatar').attr('src','/images/ui/user_placeholder.svg')
                )
            ).append(
                $('<div />').css({'float': 'left', 'padding-left': '10px'}).append(
                    $('<div />').addClass('chatlist_title').text(title),
                    $('<div />').addClass('chatlist_text').text(message.text)
                )
            )
        )
    )
$('#聊天列表')。追加(
$('').addClass('chatlist_cell')。追加(
$('').addClass('chatlist\u cell\u inner')。追加(
$('').css('float','left')。追加(
$('').css({'float':'left','padding left':'10px')。追加(
$('').addClass('chatlist_title')。文本(title),
$('').addClass('chatlist_text').text(message.text)
)
)
)
)

在JS/jQuery中有更好的方法吗?如果没有,还有其他工具吗?

如果您不愿意/无法使用成熟的JS框架(没有问题)您可能需要查看下划线/这是一种非常轻量级的方法,它可以避免您编写代码将dom修改为任何可能的状态。您只需概述数据的呈现方式,然后在数据发生更改时重新呈现数据。请注意,这不应用于“web app”类型的应用,因为JS框架更适合该工作(React/Flow、Angular、Backbone、Ember等)但是对于为小的或很少改变的接口生成HTML,lodash非常好

例如:

从您的代码:

<script id="myTemplate" type="text/template"> 
    <div class='chatlist_cell'>
        <div class='chatlist_cell_inner'>
            <div style='float: left;'>
                <img class='chatlist_avatar' src='/images/ui/user_placeholder.svg'>
            </div>
            <div style='float: left; padding-left: 10px;'>
                <div class='chatlist_title'><%=title%></div>
                <div class='chatlist_text'><%=fromUserString%> <%=message.text%></div>
            </div>
        </div>
    </div>
</script>
<script>
    $(function() {
        var myTemplate = _.template($('#myTemplate').html());
        function addNewMessage(title, message, fromUserString) {
            var html = myTemplate({
                title: title,
                message: message,
                fromUserString: fromUserString
            });
            $('#chatlist').append(html);
        }
        addNewMessage("myTitle", {text: "myText"}, "JoshStrange:");
    });

</script>

$(函数(){
var myTemplate=35;.template($('#myTemplate').html();
函数addNewMessage(标题、消息、fromUserString){
var html=myTemplate({
标题:标题,,
讯息:讯息,,
fromUserString:fromUserString
});
$(“#聊天列表”).append(html);
}
addNewMessage(“myTitle”,{text:“myText”},JoshStrange:”);
});

,@CD..这在IE或移动浏览器AFAICT上不受支持。