将类添加到动态添加的元素

时间:2016-03-09 16:46:46

标签: javascript jquery html dom

我有一个解析JSON字符串并生成切片网格的函数。 网格宽度和高度在JSON中设置,以及"特殊瓷砖的坐标"喜欢障碍。

事实上,解析JSON的函数会生成地图,但不会添加"障碍"因为它们是动态添加的,所以在tile上有类。

我解析JSON的函数:

            $('#json-result textarea').change(function(){

                $.each($.parseJSON($(this).val()), function (item, value) {
                    if(item == 'name') { $('#name').val(value); }
                    if(item == 'width') { $('#width').val(value); }
                    if(item == 'height') { $('#height').val(value); }

                    generateMap();

                    if (item == 'obstacles') {
                        $.each(value, function (i, object) {

                            console.log('[data-x="' + object['x'] + '"][data-y="' + object['y'] + '"]');
                            var obs = $('#map-preview').find('[data-x="' + object['x'] + '"][data-y="' + object['y'] + '"]');

                            console.log(obs);
                            obs.addClass('obstacle');


                        });
                    }

                });

            });

generateMap函数在这里生成网格。 它在输入框中获得高度和宽度的值,因为该过程也是"反向"。

function generateMap(){
    $('#map-preview').html('');

    var height = $('#height').val();
    var width = $('#width').val();

    for(h = 0 ; h < height ; h++) 
    {
          for(w = 0 ; w < width ; w++)
          {
               $('#map-preview').append('<div class="tile" data-x="' + w + '" data-y="' + h + '"></div>');
          }

          $('#map-preview').append('<br />');
    }
}

生成的HTML位于map-preview div中。 map-preview div在开头就是空的。 &#34;瓷砖&#34;是动态添加的。

<div id="map-preview">
    <div class="tile" data-x="0" data-y="0"></div>
    <div class="tile" data-x="1" data-y="0"></div>
    <div class="tile" data-x="2" data-y="0"></div>
    <div class="tile" data-x="3" data-y="0"></div>
    <br>
    <div class="tile" data-x="0" data-y="1"></div>
    <div class="tile" data-x="1" data-y="1"></div>
    <div class="tile" data-x="2" data-y="1"></div>
    <div class="tile" data-x="3" data-y="1"></div>
    <br>
    <div class="tile" data-x="0" data-y="2"></div>
    <div class="tile" data-x="1" data-y="2"></div>
    <div class="tile" data-x="2" data-y="2"></div>
    <div class="tile" data-x="3" data-y="2"></div>
    <br>
</div>

所以,在第一段代码中,我尝试在障碍区块中添加一个类,但没有做任何事情。当我尝试在Chrome控制台中输入相同的代码时,它可以正常工作,但不能代码。

我尝试使用和不使用.find(),但没有任何作用。

1 个答案:

答案 0 :(得分:1)

generateMap();很可能应该在.each()之外调用,因为现在每次迭代$.each($.parseJSON($(this).val()), function (item, value) {都会重新生成地图,从而删除所有先前的更改。