在 jquery 中精炼 if/else?
Refining an if/else in jquery?
我有以下代码,如果某个 div 有一个特定的 class 执行一个具有默认布局的同位素代码块,或另一个 class,执行第二个砌块布局。
效果很好,但我想稍微改进一下代码。最好的方法是什么?
var $body = $('.c3');
if ($body.hasClass('.standard')) {
var $container = $('.portfolio-items').imagesLoaded(function () {
// Initialize isotope
$container.isotope({
filter: '*',
layoutMode: 'fitRows',
animationOptions: {
duration: 750,
easing: 'linear'
}
});
});
} else {
var $container = $('.portfolio-items').imagesLoaded(function () {
$container.isotope({
filter: '*',
layoutMode: 'masonry',
animationOptions: {
duration: 750,
easing: 'linear'
},
masonry: {
columnWidth: 1
}
});
});
}
我建议使用选项对象(这正是 isotope 所期望的)来删除代码重复。这可能如下所示:
// Default options
var isotopeOptions = {
filter: '*',
animationOptions: {
duration: 750,
easing: 'linear'
}
};
// Set specific options
var $body = $('.c3');
if ($body.hasClass('.standard')) {
isotopeOptions.layoutMode = 'fitRows';
} else {
isotopeOptions.layoutMode = 'masonry';
isotopeOptions.masonry = {
columnWidth: 1
};
}
var $container = $('.portfolio-items').imagesLoaded(function() {
$container.isotope(isotopeOptions);
});
如果一种情况比另一种情况更有可能,您可以考虑设置例如'fitRows'
作为默认布局,因此删除其中一个 if 分支。
我有以下代码,如果某个 div 有一个特定的 class 执行一个具有默认布局的同位素代码块,或另一个 class,执行第二个砌块布局。
效果很好,但我想稍微改进一下代码。最好的方法是什么?
var $body = $('.c3');
if ($body.hasClass('.standard')) {
var $container = $('.portfolio-items').imagesLoaded(function () {
// Initialize isotope
$container.isotope({
filter: '*',
layoutMode: 'fitRows',
animationOptions: {
duration: 750,
easing: 'linear'
}
});
});
} else {
var $container = $('.portfolio-items').imagesLoaded(function () {
$container.isotope({
filter: '*',
layoutMode: 'masonry',
animationOptions: {
duration: 750,
easing: 'linear'
},
masonry: {
columnWidth: 1
}
});
});
}
我建议使用选项对象(这正是 isotope 所期望的)来删除代码重复。这可能如下所示:
// Default options
var isotopeOptions = {
filter: '*',
animationOptions: {
duration: 750,
easing: 'linear'
}
};
// Set specific options
var $body = $('.c3');
if ($body.hasClass('.standard')) {
isotopeOptions.layoutMode = 'fitRows';
} else {
isotopeOptions.layoutMode = 'masonry';
isotopeOptions.masonry = {
columnWidth: 1
};
}
var $container = $('.portfolio-items').imagesLoaded(function() {
$container.isotope(isotopeOptions);
});
如果一种情况比另一种情况更有可能,您可以考虑设置例如'fitRows'
作为默认布局,因此删除其中一个 if 分支。