【问题标题】:Append li items with For Loop in JS在 JS 中使用 For 循环附加 li 项
【发布时间】:2013-12-31 05:08:57
【问题描述】:

我现在的脑洞最大……

我需要附加 i 数量的幻灯片(可以为空白),但它们必须具有用于内部 div 的特定类,以及幻灯片名称中由 i 组成的特定 ID。

<ul class="bjqs"><!-- Target This -->

<li id="slide0"><!-- Append these -->
    <div class="center"><!-- Append these -->
        <span class="author"></span><!-- Append these -->
        <span class="time"></span><!-- Append these -->
    </div>
    <div class="image"></div><!-- Append these -->
</li>
<li id="slide1"><!-- Append these -->
    <div class="center"><!-- Append these -->
        <span class="author"></span><!-- Append these -->
        <span class="time"></span><!-- Append these -->
    </div>
    <div class="image"></div>
</li>
<li id="slide2">... etc
</ul>

也许基本的for loop 可以工作...?

    var slideCount = 20;
    for(var i = slideCount-1;i>=0;i--){
        $('ul.bjqs').after('<li id="slide'+i+'"><div class="center"><span class="author"></span><span class="time"></span></div><div class="image"></div></li>');
    }

(嗯,它确实有效......但是有更清洁的方法吗?)

【问题讨论】:

  • 查看模板 [event the basic feature by underscore.js will do]。

标签: javascript jquery html for-loop append


【解决方案1】:

这取决于您的需求和您喜欢的方式。

如果你现在已经有一张幻灯片需要创建其他的,可以使用clone方法:

var slideCount = 20;
for(var i = slideCount-1;i>=0;i--){
    $('ul.bjqs').after($('#slide0').clone().attr('id', 'slide'+i));
}

Here is the documentation.

否则,您的方法还不错。我个人不喜欢这样输出带有 js 的 html,因为如果您必须更改布局(至少 html 和 js 文件),您将需要维护多个文件。一个好的方法是在开始时克隆(见上文)隐藏的空幻灯片,然后在生成其他幻灯片后将其删除。

【讨论】:

  • 这似乎没有将子 div 和 span 附加到适当的类中。
  • 您应该能够按照他给您的答案运行并以此为基础。 @NicholasHazel
  • 有什么问题?通常,克隆执行元素的深层复制,唯一没有复制的是动态属性/属性(事件,值......)。我在答案中添加了文档链接。
  • 如果您将隐藏的div 作为包含所有子项和属性的模板,那么您可以克隆它。 @NicholasHazel
  • 啊,我明白你在说什么。我没想到它也会克隆所有的孩子。非常感谢!
【解决方案2】:

更简洁的方法是使用双向绑定库,例如 angular.js

HTML

<li ng-repeat="slide in slides" id="slide{{$index}}">
<div class="center">
   <span class="author">{{slide.author}}</span>
   <span class="time">{{slide.time}}</span>
</div>
<div class="image"></div>
</li>

JS

$scope.slides=[{author:"Chris",time:"Tues"},{author:"Owen",time:"Wed"}];

【讨论】:

  • 感谢您的回答,但这不适用于我的用例。 (我正在导入并循环浏览一个非常大的 JSON 文件,并且正在运行其他脚本来过滤该对象。
  • 我一直以角度处理大型 json 响应。如果你想过滤,我会将 angular 与 lodash (lodash.com) 结合使用,这是一个非常好的和高性能的库来处理集合。
  • 感谢您的建议。我们目前正在利用 Angular 创建一个持久的工作流。 :-) 不熟悉 lodash,但肯定会研究。我们在 json 文件中的内容比必要的要多,我必须在 JS 中相应地过滤结果。刚刚忘记了语法:-P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 2021-08-15
  • 2014-01-24
  • 2017-12-27
相关资源
最近更新 更多