简体   繁体   English

插入div以使用JavaScript生成的HTML包装其他div

[英]Insert a div to wrap other divs with JavaScript generated HTML

If I have the following code: 如果我有以下代码:

$(document).ready(function() {
    $(function() {
        var agents = [];
        $.getJSON('js/agents.json', function(a) {
            $.each(a.agents, function(b, c) {
                var content = 
                '<div class="status-card">' +
                '<div class="agent-details">' +
                '<span class="agent-name">' + c.name + '</span>' +
                '<span class="handling-state">' + c.callStatus + '</span>' +
                '<span class="handling-time">' + c.handlingTime + '</span>' +
                '</div>' +
                '<div class="status-indicator"></div>' +
                '</div>'
                $(content).appendTo('#left');
            });
        });
    });
}); 

And say that rendered from the JSON data: 并说从JSON数据呈现:

<div class="status-card">
    <div class="agent-details">
        <span class="agent-name">Castro Cook</span>
        <span class="handling-state">Idle</span>
        <span class="handling-time">06:32:09</span>
    </div>
    <div class="status-indicator"></div>
</div>
<div class="status-card">
    <div class="agent-details">
        <span class="agent-name">Amie Spencer</span>
        <span class="handling-state">On Call</span>
        <span class="handling-time">06:00:17</span>
    </div>
    <div class="status-indicator"></div>
</div>

I want to use this JS: 我想使用这个JS:

var slideSection = $('div[class^="agent-status-section-"]').hide(),
i = 0;
(function cycle() { 
    slideSection.eq(i).fadeIn(900)
        .delay(2000)
        .fadeOut(900, cycle);
    i = ++i % slideSection.length;
})();

To only show 1 .status-card div at a time and cycle through, so I need to wrap each .status-card like: 要一次只显示1个.status-card div并循环显示,因此我需要像这样包装每个.status-card

<div class="agent-status-section-1">
    <div class="status-card">
        .......
    </div> 
</div>
<div class="agent-status-section-2">
    <div class="status-card">
        .......
    </div> 
</div>

Note that I'm just keeping it simple, really I'd be wrapping every 10 .status-card divs. 请注意,我只是保持简单,实际上我将每10个.status-card div包装一次。

I found the following that I could use, but I'd also need to increment the number at the end ( agent-status-section-1, agent-status-section-2 ) each time it's inserted, how would I do that? 我找到了可以使用的以下内容,但是每次插入时,我还需要在末尾增加数字( agent-status-section-1, agent-status-section-2 ),我该怎么做?

var d = $('.status-card');
for( var i = 0; i < d.length; i+=5 ) {
    d.slice(i, i+5).wrapAll('<div class="agent-status-section-1">');
}

Hope that makes sense! 希望有道理! Thanks 谢谢

You can divide your index by five (after incrementing within the loop) to get the series 1, 2, 3, ... and use it to dynamically construct your wrapping HTML string. 您可以将索引除以五(在循环内递增)以得到序列1、2、3,...,并使用它动态构造包装的HTML字符串。

Edit: You can inspect the HTML code now in the following demo; 编辑:您可以在下面的演示中检查HTML代码; it works! 有用!

 var cards = $('.status-card'), i = 0 while (i < cards.length) { cards.slice(i, i += 5).wrapAll('<div class="agent-status-section-' + (i / 5) + '">'); } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="status-card"> <div class="agent-details"> <span class="agent-name">Castro Cook</span> <span class="handling-state">Idle</span> <span class="handling-time">06:32:09</span> </div> <div class="status-indicator"></div> </div> <div class="status-card"> <div class="agent-details"> <span class="agent-name">Amie Spencer</span> <span class="handling-state">On Call</span> <span class="handling-time">06:00:17</span> </div> <div class="status-indicator"></div> </div> <div class="status-card"> <div class="agent-details"> <span class="agent-name">Castro Cook</span> <span class="handling-state">Idle</span> <span class="handling-time">06:32:09</span> </div> <div class="status-indicator"></div> </div> <div class="status-card"> <div class="agent-details"> <span class="agent-name">Amie Spencer</span> <span class="handling-state">On Call</span> <span class="handling-time">06:00:17</span> </div> <div class="status-indicator"></div> </div> <div class="status-card"> <div class="agent-details"> <span class="agent-name">Castro Cook</span> <span class="handling-state">Idle</span> <span class="handling-time">06:32:09</span> </div> <div class="status-indicator"></div> </div> <div class="status-card"> <div class="agent-details"> <span class="agent-name">Amie Spencer</span> <span class="handling-state">On Call</span> <span class="handling-time">06:00:17</span> </div> <div class="status-indicator"></div> </div> <div class="status-card"> <div class="agent-details"> <span class="agent-name">Castro Cook</span> <span class="handling-state">Idle</span> <span class="handling-time">06:32:09</span> </div> <div class="status-indicator"></div> </div> <div class="status-card"> <div class="agent-details"> <span class="agent-name">Amie Spencer</span> <span class="handling-state">On Call</span> <span class="handling-time">06:00:17</span> </div> <div class="status-indicator"></div> </div> <div class="status-card"> <div class="agent-details"> <span class="agent-name">Castro Cook</span> <span class="handling-state">Idle</span> <span class="handling-time">06:32:09</span> </div> <div class="status-indicator"></div> </div> <div class="status-card"> <div class="agent-details"> <span class="agent-name">Amie Spencer</span> <span class="handling-state">On Call</span> <span class="handling-time">06:00:17</span> </div> <div class="status-indicator"></div> </div> <div class="status-card"> <div class="agent-details"> <span class="agent-name">Castro Cook</span> <span class="handling-state">Idle</span> <span class="handling-time">06:32:09</span> </div> <div class="status-indicator"></div> </div> <div class="status-card"> <div class="agent-details"> <span class="agent-name">Amie Spencer</span> <span class="handling-state">On Call</span> <span class="handling-time">06:00:17</span> </div> <div class="status-indicator"></div> </div> <div class="status-card"> <div class="agent-details"> <span class="agent-name">Castro Cook</span> <span class="handling-state">Idle</span> <span class="handling-time">06:32:09</span> </div> <div class="status-indicator"></div> </div> <div class="status-card"> <div class="agent-details"> <span class="agent-name">Amie Spencer</span> <span class="handling-state">On Call</span> <span class="handling-time">06:00:17</span> </div> <div class="status-indicator"></div> </div> <div class="status-card"> <div class="agent-details"> <span class="agent-name">Castro Cook</span> <span class="handling-state">Idle</span> <span class="handling-time">06:32:09</span> </div> <div class="status-indicator"></div> </div> <div class="status-card"> <div class="agent-details"> <span class="agent-name">Amie Spencer</span> <span class="handling-state">On Call</span> <span class="handling-time">06:00:17</span> </div> <div class="status-indicator"></div> </div> 

Just replace the 1 in the string with the i variable: 只需将字符串中的1替换为i变量:

var d = $('.status-card');
for( var i = 0; i < d.length; i+=5 ) {
    d.slice(i, i+5).wrapAll('<div class="agent-status-section-' + i + '">');
}
var d = $('.status-card');
j=0;
for( var i = 0; i < d.length; i+=5 ) {
j++;
    d.slice(i, i+5).wrapAll('<div class="agent-status-section-'+j+'">');
}

PS Do you really need different class? PS,您真的需要其他课程吗?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM