克隆具有不同选择器的元素,避免代码重复
Clone elements found with different selectors, avoiding code repetition
请问如何简化这段代码?我觉得,太长太乱了。
var launchPad = $(".launchPad").clone();
var launchPad_plankovy = $(".launchPad-plankovy").clone();
var launchPad_plankovy_tvarovany = $(".launchPad-plankovy-tvarovany").clone();
var launchPad_tyckovy = $(".launchPad-tyckovy").clone();
var launchPad_kombinovany = $(".launchPad-kombinovany").clone();
var launchPad_barvy_plankovy = $(".launchPad-barvy-plankovy").clone();
var launchPad_barvy_tyckovy = $(".launchPad-barvy-tyckovy").clone();
var launchPad_zakonceni_plotovek = $(".launchPad-zakonceni-plotovek").clone();
var launchPad_zakonceni_tycek = $(".launchPad-zakonceni-tycek").clone();
$("[name='reset']").click(function(){
$(".launchPad").html(launchPad.html());
$(".launchPad-plankovy").html(launchPad_plankovy.html());
$(".launchPad-plankovy-tvarovany").html(launchPad_plankovy_tvarovany.html());
$(".launchPad-tyckovy").html(launchPad_tyckovy.html());
$(".launchPad-kombinovany").html(launchPad_kombinovany.html());
$(".launchPad-barvy-plankovy").html(launchPad_barvy_plankovy.html());
$(".launchPad-barvy-tyckovy").html(launchPad_barvy_tyckovy.html());
$(".launchPad-zakonceni-plotovek").html(launchPad_zakonceni_plotovek.html());
$(".launchPad-zakonceni-tycek").html(launchPad_zakonceni_tycek.html());
});
您可以制作 one big selector 并一次收集所有元素。您可以在一次调用中对所有这些应用 clone
。为了恢复,您将重复使用相同的选择器,遍历结果并从收集的克隆中替换 HTML。
var $restorable = $(".launchPad, .launchPad-plankovy, " +
" .launchPad-plankovy-tvarovany, .launchPad-tyckovy, .launchPad-kombinovany, " +
" .launchPad-barvy-plankovy, .launchPad-barvy-tyckovy, " +
" .launchPad-zakonceni-plotovek, .launchPad-zakonceni-tycek");
var $launchPad = $restorable.clone();
$("[name='reset']").click(function (){
$restorable.each(function (i) {
$(this).html($launchPad.eq(i).html());
});
});
我确实注意到您为每个元素赋予了独特的 classes。最好为此目的使用 id
属性,并使用 classes 来标记具有相同 class 的相同类型的元素。如果您对所有这些元素使用一个 class,例如 'restorable'
,则列表不必那么长。
此外,由于您只使用克隆的 HTML,如果您不实际克隆,而只是保存 HTML,您将获得更好的性能和内存使用。连同将 class restorable
赋予所有这些元素的想法,代码变为:
var $restorable = $(".restorable");
var launchPadHtml = $restorable.map(function() { return $(this).html(); }).get();
$("[name='reset']").click(function (){
$restorable.each(function (i) {
$(this).html(launchPadHtml[i]);
});
});
var keys = ['launchPad-plankovy-tvarovany', 'launchPad-plankovy' ...];
var clones = {};
keys.forEach(function(key){
clones[key] = $('.' + key).clone();
}
$("[name='reset']").click(function(){
keys.forEach(function(key){
$('.' + key).html(clones[key];
}
});
在 lodash 中,移动优雅:
var keys = ['launchPad-plankovy-tvarovany', 'launchPad-plankovy' ...];
var clones = _.zipObject(keys, _.map(keys, function(key){
return $('.' + key).clone();
});
请问如何简化这段代码?我觉得,太长太乱了。
var launchPad = $(".launchPad").clone();
var launchPad_plankovy = $(".launchPad-plankovy").clone();
var launchPad_plankovy_tvarovany = $(".launchPad-plankovy-tvarovany").clone();
var launchPad_tyckovy = $(".launchPad-tyckovy").clone();
var launchPad_kombinovany = $(".launchPad-kombinovany").clone();
var launchPad_barvy_plankovy = $(".launchPad-barvy-plankovy").clone();
var launchPad_barvy_tyckovy = $(".launchPad-barvy-tyckovy").clone();
var launchPad_zakonceni_plotovek = $(".launchPad-zakonceni-plotovek").clone();
var launchPad_zakonceni_tycek = $(".launchPad-zakonceni-tycek").clone();
$("[name='reset']").click(function(){
$(".launchPad").html(launchPad.html());
$(".launchPad-plankovy").html(launchPad_plankovy.html());
$(".launchPad-plankovy-tvarovany").html(launchPad_plankovy_tvarovany.html());
$(".launchPad-tyckovy").html(launchPad_tyckovy.html());
$(".launchPad-kombinovany").html(launchPad_kombinovany.html());
$(".launchPad-barvy-plankovy").html(launchPad_barvy_plankovy.html());
$(".launchPad-barvy-tyckovy").html(launchPad_barvy_tyckovy.html());
$(".launchPad-zakonceni-plotovek").html(launchPad_zakonceni_plotovek.html());
$(".launchPad-zakonceni-tycek").html(launchPad_zakonceni_tycek.html());
});
您可以制作 one big selector 并一次收集所有元素。您可以在一次调用中对所有这些应用 clone
。为了恢复,您将重复使用相同的选择器,遍历结果并从收集的克隆中替换 HTML。
var $restorable = $(".launchPad, .launchPad-plankovy, " +
" .launchPad-plankovy-tvarovany, .launchPad-tyckovy, .launchPad-kombinovany, " +
" .launchPad-barvy-plankovy, .launchPad-barvy-tyckovy, " +
" .launchPad-zakonceni-plotovek, .launchPad-zakonceni-tycek");
var $launchPad = $restorable.clone();
$("[name='reset']").click(function (){
$restorable.each(function (i) {
$(this).html($launchPad.eq(i).html());
});
});
我确实注意到您为每个元素赋予了独特的 classes。最好为此目的使用 id
属性,并使用 classes 来标记具有相同 class 的相同类型的元素。如果您对所有这些元素使用一个 class,例如 'restorable'
,则列表不必那么长。
此外,由于您只使用克隆的 HTML,如果您不实际克隆,而只是保存 HTML,您将获得更好的性能和内存使用。连同将 class restorable
赋予所有这些元素的想法,代码变为:
var $restorable = $(".restorable");
var launchPadHtml = $restorable.map(function() { return $(this).html(); }).get();
$("[name='reset']").click(function (){
$restorable.each(function (i) {
$(this).html(launchPadHtml[i]);
});
});
var keys = ['launchPad-plankovy-tvarovany', 'launchPad-plankovy' ...];
var clones = {};
keys.forEach(function(key){
clones[key] = $('.' + key).clone();
}
$("[name='reset']").click(function(){
keys.forEach(function(key){
$('.' + key).html(clones[key];
}
});
在 lodash 中,移动优雅:
var keys = ['launchPad-plankovy-tvarovany', 'launchPad-plankovy' ...];
var clones = _.zipObject(keys, _.map(keys, function(key){
return $('.' + key).clone();
});