在jQuery中克隆/附加大型HTML块,但更改内部变量
Clone/append large HTML blocks in jQuery but change inner vars?
我有一个大的HTML块,我需要根据选择框值进行克隆和附加。它按原样工作,但我想知道我是否可以使用克隆并动态更改某些内容,而不是使用实际的 HTML 块。
.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 中。
这是一个小提琴
我知道
这可能不是你想要的,但这里有一个如何克隆 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;
}
我创建了一个简单的"来宾"数组
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);
然后循环遍历客人并遍历找到的把手栏并替换为变量
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);
};
这是小提琴...https://jsfiddle.net/csv8x6xz/15/
你可以使用 jQuery 的 clone() 函数。然后使用
newguest = $('.group-sizing').eq(0).clone();
newguest.find('span','.guest-welcome').html(i);
<<<更改克隆元素中的特定元素。>
在 jsFiddle 中测试。
.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 class='guest-welcome'>Guest <span>1</span> 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
$("#guestNum").change(function(){
var count = $(this).val();
var len = $('.group-sizing').length;
var newguest;
var remove = true;
for(var i = count; i > 0; i--)
{
newguest = $('.group-sizing').eq(0).clone();
newguest.find('span','.guest-welcome').html(i);
$(this).after(newguest);
if(remove)
{
$('.group-sizing').eq(0).nextAll().remove();
remove = false;
}
}
});
相关文章:
- 如何从函数内部的这个变量中获取值
- 匿名自执行js函数内部的全局变量在外部仍然可用
- Chrome扩展:是否有一种方法可以运行JavaScript来获取页面上的内部html,并将其保存到扩展中的变量中
- 在Javascript中的变量内部使用while()语句
- 变量内部的引号
- 循环和局部变量内部的闭包
- 展开变量内部的标记
- 从构造函数变量内部调用函数,在 JavaScript 中给出 Undefiend 错误
- 为什么没有识别全局变量(内部函数)
- Javascript变量内部数组
- Angularjs $scope变量内部的jquery绑定方法
- 转换& # 39;和“;要在变量内部使用的字符串内部.(Javascript)
- 不能复制变量内部的内容
- 调用变量内部的函数
- 从变量内部的函数访问javascript变量
- 使用Javascript为变量内部的值添加单字符串引号
- JQuery变量内部按钮函数
- 访问变量内部的DOM元素
- 我如何调用$scope变量内部函数在Ionic不同的模板
- JS如何获得一个目标变量内部的变量名