javascript - 在 jQuery 中克隆/追加大型 HTML block 但更改内部变量?

标签 javascript jquery

我有一个大型 HTML block ,需要根据选择框值进行克隆和追加。它按原样工作,但我想知道是否可以使用克隆并动态更改某些内容,而不是使用实际的 HTML block 。

HTML:

<select id="guestNum">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
</select>
<div class="group-sizing">
    <div class='form-group row border'>
        <div class='inner'>
            <h3>Guest 1 Welcome</h3>
            <div class='select'>
                <select class='form-control' id='guest1'>
                    <option value='New' selected>New</option>
                    <option value='Existing'>Existing</option>
                </select>
            </div>
        </div>
        <div class='inner'>
            <h3>Date</h3>
            <div class='date'>
                <div class='inner'>
                    <p>April 1</p>
                    <p>No Guests</p>
                </div>
            </div>
        </div>
    </div>
</div>

JS:

var comDate = $("<div class='inner'>\
                    <p>April 1</p>\
                    <p>No Guests</p>\
                </div>\
                <div class='inner'>\
                    <p>April 2</p>\
                    <p>Guests Welcome</p>\
                </div>");
$("#guestNum").change(function(){
    var count = $(this).val();
    $(".group-sizing .form-group:gt("+(count-1)+")").remove();
    for (var i = $(".group-sizing .form-group").length; i < count; i++){
        $("<div class='form-group row border'>\
        <div class='inner'>\
            <h3>Guest " + (i+1) + " Welcome</h3>\
            <div class='select'>\
                <select class='form-control' id='guest" + (i+1) + "'>\
                    <option value='New' selected>New</option>\
                    <option value='Existing'>Existing</option>\
                </select>\
            </div>\
        </div>\
        <div class='inner'>\
            <h3>Date</h3>\
            <div class='date'>" + comDate + "</div>\
        </div>\
    </div>").appendTo(".group-sizing");
    }
});

由于我已经在页面上包含了代码块,所以我想知道是否可以克隆我所拥有的代码,更改必要的值,然后这样做,而不是再次将所有 HTML 包含在 js 中。

Here's a fiddle

最佳答案

我知道这可能不完全是您想要的,但这里有一个示例,说明如何克隆 html 并在其中插入变量。

希望这能引导您走向正确的方向。

这也可能是一个页面,为了简单起见,我只是将其设置为不显示。

<div id="template" style="display:none;">
  <div class="group-sizing">
    <div class="form-group row border">
      <div class="inner">
        <h3>Guest {{id}} Welcome</h3>
        <div class="select">
          <select class="form-control" id="guest1">
            <option value="New" selected>New</option>
            <option value="Existing">Existing</option>
          </select>
        </div>
      </div>
      <div class="inner">
        <h3>Date</h3>
        <div class="date">
          <div class="inner">
            <p>{{date}}</p>
            <p>No Guests</p>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

然后创建一个 JS 函数来抓取 {{}}

的 html
function findHandleBars(html) {
  var results = [], re = /{{([^}]+)}}/g, text;

  while(text = re.exec(html)) {
    results.push(text[1]);
  }

  return results;

}

我创建了一个简单的“ guest ”数组

var guests = [
   {
      "id": "1",
      "date": "April 1"
   },
   {
      "id": "2",
      "date": "April 2"
   },
   {
      "id": "3",
      "date": "April 3"
   }
];

定义

var template = $('#template').prop('innerHTML');

调用findHandleBars方法并将数组设置为变量

var results = findHandleBars(template);

然后循环遍历客人并循环遍历找到的handleBars并替换为变量

for(i=0; i< guests.length; i++){

var n = template;

for(i=0; i< guests.length; i++){
  var n = template;

  for(b=0; b<results.length; b++){
    var n = n.replace('{{'+results[b]+'}}', guests[i][results[b]]);
  }

  $('#body').append(n);

};

这是 fiddle ... https://jsfiddle.net/csv8x6xz/15/

关于javascript - 在 jQuery 中克隆/追加大型 HTML block 但更改内部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36144129/

相关文章:

javascript - 未从服务器检索 jQuery 文件

javascript - 使用 this 和 onclick() 时无法返回 id 值

javascript - 三个表单一键提交

javascript - 如何使用 PHP 比较 Selenium WebDriver 中元素的位置

javascript - CSS - 用于选择特定字符的选择器?

jquery 与 asp.net mvc 对话框

javascript - Select2 在网站上无法正常工作

javascript - Tumblr.js API——require() 失败

javascript - 使用 className 样式化 react-toolbox 元素

javascript - 如何在href单击和鼠标悬停时播放声音