Div只追加一次
Div only appends once
我有以下代码:
switch (caseType) {
case "dates":
$.each(array.reverse(), function (index, arr) {
var $accordionOption = $('<div />', {
"class": "option",
"data-select": 'option',
"data-action": 'makePie',
text: arr
});
$accordionOption.appendTo($accordionOptionContainer);
$accordionOption.click(function () {
cache.select(this);
});
});
break;
case "cohort":
$.each(array, function (index, arr) {
var $accordionOption = $('<div />', {
"class": "option",
"data-select": 'option',
"data-action": 'makePie',
text: arr
});
$accordionOption.appendTo($accordionOptionContainer);
$accordionOption.click(function () {
cache.select(this);
});
});
break;
case "period":
$.each(array, function (index, arr) {
console.log(arr)
var $accordionOption = $('<div />', {
"class": "option",
"data-select": 'option',
"data-action": 'makePie',
text: arr
});
$accordionOption.appendTo($accordionOptionContainer);
$accordionOption.click(function () {
cache.select(this);
});
});
break;
}
它成功了,它创建了元素并把它附加到DOM中
我想把它清理干净,所以我试着这样做:
var $accordionOption = $('<div />', {
"class": "option",
"data-select": 'option',
"data-action": 'makePie'
});
switch (caseType) {
case "dates":
$.each(array.reverse(), function (index, arr) {
$accordionOption.text(arr);
$accordionOption.appendTo($accordionOptionContainer);
});
break;
case "cohort":
$.each(array, function (index, arr) {
$accordionOption.text(arr);
$accordionOption.appendTo($accordionOptionContainer);
});
break;
case "period":
$.each(array, function (index, arr) {
$accordionOption.text(arr);
$accordionOption.appendTo($accordionOptionContainer);
});
break;
}
$accordionOption.click(function () {
cache.select(this);
});
然而,我注意到它只追加了循环中的最后一个数组项。这是因为每次都要重新创建变量吗?还是因为它在附加之前将所有内容添加到accordion选项中?或者重写相同的变量?
我的最终解决方案:
function getDiv() {
return $('<div />', {
"class": "option",
"data-select": 'option',
"data-action": 'makeTable'
});
}
$.each(caseType == "dates" ? array.reverse() : array, function (index, arr) {
var $accordionOption = getDiv()
.text(arr)
.click(function () { cache.select(this) })
.appendTo($accordionOptionContainer);
});
简单的内联if如何,因为唯一的区别是dates
中的数组。
$.each(caseType == "dates" ? array.reverse() : array, function(index, arr) {
var $accordionOption = $('<div />', {
"class": "option",
"data-select": 'option',
"data-action": 'makePie'
});
$accordionOption.text(arr);
$accordionOption.appendTo($accordionOptionContainer);
$accordionOption.click(function() {
cache.select(this);
});
});
每次都添加相同的元素。
$('<div />')
创建一个元素,这是每次附加的相同元素
改成这样:
function getDiv(){
return $('<div />', {
"class": "option",
"data-select": 'option',
"data-action": 'makePie'
});}
switch (caseType) {
case "dates":
$.each(array.reverse(), function (index, arr) {
$accordionOption.text(arr);
$accordionOption.appendTo(getDiv());
});
break;
case "cohort":
$.each(array, function (index, arr) {
$accordionOption.text(arr);
$accordionOption.appendTo(getDiv());
});
break;
case "period":
$.each(array, function (index, arr) {
$accordionOption.text(arr);
$accordionOption.appendTo(getDiv());
});
break;
}
$accordionOption.click(function () {
cache.select(this);
});
相关文章:
- Javascript返回值只在循环中返回一次
- Jquery FadeIn FadeOut 只工作一次
- Javascript html每点击一次就会更改url
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Rails操作只调用一次,但我在ajax中每秒钟都调用一次
- jQuery滚动功能只工作一次
- 刷新导致我的帖子“;张贴“;再一次
- 引导程序崩溃一次只能看到一个
- 有没有一个抽象层,这样我就可以集成一次,然后使用pusher、pubnub或faye
- 仅追加元素一次
- 授权标头仅在 AJAX CORS 请求中追加一次
- 仅追加一次 UI 元素,避免事件传播
- 在html中一次追加多个选项选择
- 如何使用jquery只追加一次数据
- 在Javascript中追加一次
- 追加一次javascript href link
- Div只追加一次
- 在悬停追加一次跨度
- 如何在特定的屏幕分辨率范围发生时追加一次html元素
- 为什么追加到只工作一次