javascript foreach和jquery' s .append()

时间:2014-08-25 02:03:58

标签: javascript jquery htmlcollection

我浪费了整整一天试图解决它,我想我已经钉了它,但仍然不确定到底是什么:/

我有一个js文件,我为<option>生成<select>&#39;

_htmlString = '<option value="' + __hex_value + '" data-class="' + _cbtn.substring(1, 13) + '">' + __hex_value + '</option>\n';  
jQuery("#colourtiles").append(_htmlString);

#colourtiles<select>的ID。 我在html中也有3个静态选项。

现在,在另一个脚本中,我这样做:

        [].slice.call( this.el.children ).forEach( function(el) {
        console.info(el);
        if( el.disabled ) { return; }

        var tag = el.tagName.toLowerCase();

        if( tag === 'option' ) {
            options += createOptionHTML(el);
        }
        else if( tag === 'optgroup' ) {
            options += '<li class="cs-optgroup"><span>' + el.label + '</span><ul>';
            [].slice.call( el.children ).forEach( function(opt) {
                options += createOptionHTML(opt);
            } )
            options += '</ul></li>';
        }
    } );

...但这只会渲染3个元素,完全忽略了.append()添加的元素。 要清楚的是,当我在控制台中返回<select>时,它就在那里。 但我注意到,this.el.children.length是...... 3!

所以它看起来像1)jQuery没有更新.length,并且2)forEach()依赖它,因此失败。 我是对的吗?这是jQuery中的错误,还是我是傻瓜? 我该如何解决这个问题?

非常感谢所有答案。 马尔钦

1 个答案:

答案 0 :(得分:0)

首先,我会像这样附加每个选项

 $("<option/>")
    .val(__hex_value)
    .data("class",_cbtn.substring(1, 13))
    .html(__hex_value)
    .appendTo("#colourtiles");

我不知道你的代码中有el是什么,所以我真的无法给出更多答案,但如果你想循环选择该选项中的每个选项,请使用{{1}它将包括你在DOM中所做的事情:

.each()