在循环中创建网页元素的问题

for (var i = 0; i < json.length; i++) {
    var topic = json[i];
    var btn = $(‘<button>‘);
    btn.addClass(‘btn btn-primary‘);
    btn.attr(‘type‘, ‘button‘);
    btn.html(topic.topicComment);
    $.getJSON(‘action.action‘, {
        topicId : topic.p2pTopicId
    }, function(res) {
        var jsn = $.parseJSON(res);
        var cnt = parseInt(jsn);
        if (cnt > 0) {
            btn.removeClass(‘btn-default‘).addClass(‘btn-primary‘);
        } else {
            btn.removeClass(‘btn-primary‘).addClass(‘btn-default‘);
        }
    });
    $(‘#hrAfterBtn‘).before(btn);
}

这样创建是有问题的,其中的$.getJSON会在所有的循环都结束之后才调用,

这样其中的btn对象就是循环结束之后的最后的那个btn对象;

需要将其中的创建过程提炼成一个函数:

for (var i = 0; i < json.length; i++) {
    var topic = json[i];
    createMsgButton(topic);
}
function createMsgButton(topic) {
    var btn = $(‘<button>‘);
    //...
}
时间: 2024-10-12 13:52:56

在循环中创建网页元素的问题的相关文章

webBrowser中操作网页元素全攻略

webBrowser中操作网页元素全攻略 2012-12-20 14:21 188人阅读 评论(0) 收藏 举报 1.获取非input控件的值: webBrowser1.Document.All["控件ID"].InnerText; 或webBrowser1.Document.GetElementById("控件ID").InnerText; 或webBrowser1.Document.GetElementById("控件ID").GetAttr

循环中创建函数的问题

//糟糕的例子 var add_handlers = function(nodes){ var i; for(i = 0; i < nodes.length; i++){ nodes[i].onclick = function (e){ alert(i); }; } }; //结束糟糕的例子 //改进的例子 var add_handlers = function(nodes){ var helper = function(i){ return function(e){ alert(i); } }

Java集合类ArrayList循环中删除特定元素

在项目开发中,我们可能往往需要动态的删除ArrayList中的一些元素. 一种错误的方式: <pre name="code" class="java">for(int i = 0 , len= list.size();i<len;++i){ if(list.get(i)==XXX){ list.remove(i); } } 上面这种方式会抛出如下异常: Exception in thread "main" java.lang.I

为什么在foreach循环中不要对元素进行remove/add操作?

目录 前言 正文 为什么结果如此不同? remove/add方法? 如何解决? 前言 在阿里巴巴Java开发手册中,有下面这样的规定: 这篇文章我们就来深入探讨其中的原因. 正文 为什么结果如此不同? 我们先来看看前言中的反例会出现什么意料之外的结果: ---------------------------------------------------------------------------------------------------------------------------

循环中安全删除集合元素

在循环中删除集合元素可能出现数组越界的问题,比如: List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); for (Integer item : list) { System.out.println(item); if (item == 1) { list.remove(item); } } 正确的做法是使用迭代器: List<Integer> list = new

循环中的闭包问题

循环中使用闭包,假设我们需要在每次循环中调用循环序号 for(var i = 0; i < 10; i++) {setTimeout(function() {console.log(i); }, 1000);}上面的代码不会输出数字 0 到 9,而是会输出数字 10 十次. 当 console.log 被调用的时候, 匿名函数保持对外部变量 i 的引用,此时 for循环已经结束, i 的值被修改成了 10. 为了得到想要的结果,需要在每次循环中创建变量 i 的 拷贝. 避免引用错误为了正确的获得

HTML中块级元素和行内元素的总结和区分。

摘自: https://www.cnblogs.com/yanqiu/p/8987126.html HTML标签 html标签定义: 是由一对尖括号包裹的单词构成,例如: <html>. 标签不区分大小写<html> 和 <HTML>, 推荐使用小写. 标签分为两部分: 开始标签<html> 和 结束标签</html>, 两个标签之间的部分我们叫做标签体. 有些标签功能比较简单,使用一个标签即可,这种标签叫做自闭和标签,例如: <br/&g

网页中创建音频、视频和Flash等多媒体:object元素

<object>元素:它主要用于定义网页中的多媒体,比如音频.视频.Java applets.PDF.ActiveX和Flash.Object标签是成对出现的,在object标签内可以使用param标签等.Object标签内除了param标签外,其它的内容将在浏览器不支持object标签时显示.注意,在HTML5尚未制定完成且普及时,最好使用flash在网页中播放音频和视频,以保证最大兼容性 Object标签的主要可选属性: type -> 被规定在data属性中指定的文件中出现的数据的

动态创建并访问网页元素

最近在做OCX控件,但这个控件并不是一打开网页就需要初始化的,而是根据需要动态创建:在控件初始化的时候需要在控件内部获取其在网页中的DOM对象:并且创建之后需要立刻调用控件的方法. 最开始的方法如下: 1 var ctrl = document.createElement('object'); 2 ctrl.classid = 'CLSID:DCC16727-7A51-47B4-B38E-B020EAAF0584'; 3 document.body.appendChild(ctrl); 这个方法