更干净/更简单的jquery编写方式"if"代码
Cleaner/simpler way of writing this jquery "if" code?
我写了这个if语句,它工作得很好,但我只是想知道是否有更容易/更简单的方法来做它
if(id == 'small'){
$('#box').append('<div class="small">' + foo + '</div>');
$('.medium,.large').remove();
}
if(id == 'medium'){
$('#box').append('<div class="medium">' + foo + '</div>');
$('.small,.large').remove();
}
if(id == 'large'){
$('#box').append('<div class="large">' + foo + '</div>');
$('.small,.medium').remove();
}
我的建议是:
if (id == 'small' || id == 'medium' || id == 'large') {
$('#box').append('<div class="' id '">' + foo + '</div>');
$('.small, .medium, .large').not('.' + id).remove();
}
虽然我怀疑它可以改进,但这是,到目前为止,未经测试。
修改后的示例:
$('ul li').click(
function() {
var ID = this.id;
if (ID == 'small' || ID == 'medium' || ID == 'large') {
$('<div />').addClass(ID).appendTo('#box');
$('#box .small, #box .medium, #box .large')
.not('.' + ID + ':first')
.remove();
}
});
JS Fiddle demo.
通过在.not()
方法中添加+ ':first'
来修改上述演示,以防止添加相同类的重复框,正如@Dizzi:
这是可行的,但如果你点击更多,然后你有额外的框。
编辑进一步修改:
$('ul li').click(
function() {
var ID = this.id;
var foo = "some content, from somewhere.";
if (ID == 'small' || ID == 'medium' || ID == 'large') {
$('#box')
.empty();
$('<div />')
.addClass(ID)
.text(foo)
.appendTo('#box');
}
});
JS Fiddle demo.
只有当 如果有其他内容,那么选择器将(可能)仍然必须用于代替.small
、.medium
和.large
div是#box
的only内容时,才可以使用empty()
。如果它们是,清空#box
和然后插入会稍微快一些,而不是先插入和然后使用选择器删除其他内容。empty()
。
编辑,包括@Raynos的建议(在评论中):
if (ID in {small:0, medium:0, large:0})
工作得很好,但可读性较差。不过角色更少了!
$('ul li').click(
function() {
var ID = this.id;
var foo = "some content, from somewhere.";
if (ID in {small:0, medium:0, large:0}) {
$('#box')
.empty();
$('<div />')
.addClass(ID)
.text(foo)
.appendTo('#box');
}
});
JS Fiddle demo.
引用:
-
empty()
. -
addClass()
. -
text()
.
你可以这样做:
$('#box').append('<div class="'+id+'">' + foo + '</div>');
$('.small,.medium,.large').not('.'+id).remove();
可能不是最好的方式,但它将其切割为2行。我可以想象,如果我对整个代码有更好的理解,您可能会以更好的方式完成这个任务。似乎这可能被调用多次,每次添加和删除div并不是最优的。
至少,您应该使用if/else而不是单独的if或开关相关文章:
- 为什么这在IE中的工作方式与在Firefox中不同
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 铬:“;未捕获的语法错误:意外的标记:"
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 使用javascript存储变量的最安全方式
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 以可优化的方式使用requirejs加载模板
- 在Highcharts中,我们可以通过任何方式在渲染图表之前获得plotWidth和plotHeight
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- 我真的很喜欢红宝石般的方式;isACar"方法名称,但如何在js中完成
- "React”;以ReactJS的方式
- Opencart错误“;SyntaxError:意外的标记<"付款方式结账期间
- 检测方式“;拒绝显示文档,因为X-Frame-Options禁止显示"错误
- 当添加“;目标“:"空白“;通过javascript链接,打开的选项卡是“;回收的“;(重复使用)-以任何方式
- JavaScript-替换“JavaScript”的正确方式是什么"用“/"在RegExp中
- 我如何以编程方式调用;打印预览"屏幕使用Javascript或Jquery
- 有没有一种设置方式"!“重要”;用于event.stop()