监听事件

<input type="radio" name="at_spec" **lay-filter="at_spec_type"** value="1" title="单套餐" checked="">
<input type="radio" name="at_spec" **lay-filter="at_spec_type"** value="2" title="多套餐" checked="">
form.on("radio(at_spec)", function(data) {
  if (data.value === '1') {
    specmany.addClass('layui-hide') && specsingle.removeClass('layui-hide');
  } else {
    specmany.removeClass('layui-hide') && specsingle.addClass('layui-hide');
  }
});
$(document).on('click', '.spec-group-delete', function () {

});

删除项目

splice() 
-> 方法向/从数组中添加/删除项目,然后返回被删除的项目。
-> 注释:该方法会改变原始数组
1. index	必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
2. howmany	必需。要删除的项目数量。如果设置为 0,则不会删除项目。
3. item1, ..., itemX	可选。向数组添加的新项目。

push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。

var data = {
  spec_attr: [],
  spec_list: [],
}
data.spec_attr.push({
  group_id: specId,
  group_name: specNameInputValue,
  spec_items: [{
    item_id: spec_value_id,
    spec_value: specValueInputValue
  }]
});

layui 模板引擎

layui书册:链接

<script id="tpl_spec_attr" type="text/html">
  {{#  layui.each(d.spec_attr, function(index, value){ }}
    <div class="spec-group-item" data-index="" data-group-id="">
      <div class="spec-group-name">
        <span></span>
        <i class="spec-group-delete layui-icon" title="点击删除">ဇ</i>
      </div>
      <div class="spec-list layui-clear">
        {{# layui.each(value.spec_items, function(key, item){ }}
        <div class="spec-item layui-fl" data-item-index="">
          <span></span>
          <i class="spec-item-delete layui-icon" title="点击删除">ဇ</i>
        </div>
        {{# }); }}
      </div>
    </div>
  {{#  }); }}
</script>
var spec_attr = $('#tpl_spec_attr').html(),spec_attr_view = $('.spec-attr');
laytpl(spec_attr).render(data, function(html){
     spec_attr_view.html(html);
 });

layui 渲染

layui.use(['layer', 'form', 'laytpl', 'table'], function() {
  var layer = layui.layer,
    $ = layui.jquery,
    form = layui.form,
    laytpl = layui.laytpl;
});
form.render();
table.render();

移除data-item-index=xxx的元素

specGroup.find("[data-item-index="+itemIndex+"]").remove();