Javascript 需要jQuery代码重构帮助
之前的更新,以下是我要处理的内容:Javascript 需要jQuery代码重构帮助,javascript,jquery,refactoring,Javascript,Jquery,Refactoring,之前的更新,以下是我要处理的内容: <body> <div class="header"> <img class="imgLogo" src="img/vegtablelogo.jpg"> </div> <div id="thumbsContainer"> <div class="thumb" id="carrotThumb"> <img id="showCarrot" class="imgThumb" src="
<body>
<div class="header"> <img class="imgLogo" src="img/vegtablelogo.jpg"> </div>
<div id="thumbsContainer">
<div class="thumb" id="carrotThumb"> <img id="showCarrot" class="imgThumb" src="img/carot.jpg" onClick=setupVeg("showCarrot", "carrotBig") /> </div>
<div class="hidden" id="carrotBig"> <img class="imgBig" src="img/carot.jpg" /> </div>
<div class="thumb" id="brocThumb"> <img id="showBroc" class="imgThumb" src="img/brocoli.jpg" onClick=setupVeg("showBroc", "brocBig") /> </div>
<div class="hidden" id="brocBig"> <img class="imgBig" src="img/brocoli.jpg" /> </div>
</div>
<!-- end thumbs container -->
<script>
var active = "";
function setupVeg(thumbVeg, hiddenVeg) {
$("#" + thumbVeg).click(function() {
if (active != hiddenVeg) {
$("div.hidden").hide("fast");
$("#" + hiddenVeg).show("fast", function() {});
active = hiddenVeg;
}
else {
$("div.hidden").hide("fast");
active="";
}
});
}
$("div.hidden").click(function () {
$("div.hidden").hide("fast");
isAnyBig=false;
});
</script>
</body>
var active=“”;
功能设置VEG(thumbVeg、hiddenVeg){
$(“#”+thumbVeg)。单击(函数(){
如果(活动!=hiddenVeg){
$(“div.hidden”).hide(“fast”);
$(“#”+hiddenVeg.show(“fast”,function(){});
活动=隐藏;
}
否则{
$(“div.hidden”).hide(“fast”);
主动=”;
}
});
}
$(“div.hidden”)。单击(函数(){
$(“div.hidden”).hide(“fast”);
isAnyBig=假;
});
不幸的是,此代码不起作用。我借用了下面建议的解决方案
如果它真的有用那就太好了!
欢迎提供任何建议。创建一个函数并重用它……类似于:
/**
* document here....
*/
var toggleElements = function() {
// your code here
}
然后
$("#whatever").click(toggleElements);
创建一个函数并重用它…类似于:
/**
* document here....
*/
var toggleElements = function() {
// your code here
}
然后
$("#whatever").click(toggleElements);
我个人建议创建一个简单的jQuery插件。大概是这样的:
(function($){
$.fn.big = function(options) {
var defaults = {
target: '#carrotBig',
};
var options = $.extend(defaults, options);
return this.each(function() {
$(this).click(function () {
isBrocBig=false;
if (isCarrotBig == false && isAnyBig == false) {
$(options.target).show("fast", function() {});
isCarrotBig=true;
isAnyBig=true;
}
else if (isCarrotBig == true) {
$(options.target).hide("fast");
isCarrotBig=false;
isAnyBig=false;
}
else if (isCarrotBig == false && isAnyBig == true) {
$("div.hidden").hide("fast");
$(options.target).show("fast", function() {});
isCarrotBig=true;
}
else {
$("div.hidden").hide("fast");
isCarrotBig=false;
isAnyBig=false;
}
});
});
};
})(jQuery);
$("#showCarrot").big({target: '#carrotBig'})
然后你可以这样称呼它:
(function($){
$.fn.big = function(options) {
var defaults = {
target: '#carrotBig',
};
var options = $.extend(defaults, options);
return this.each(function() {
$(this).click(function () {
isBrocBig=false;
if (isCarrotBig == false && isAnyBig == false) {
$(options.target).show("fast", function() {});
isCarrotBig=true;
isAnyBig=true;
}
else if (isCarrotBig == true) {
$(options.target).hide("fast");
isCarrotBig=false;
isAnyBig=false;
}
else if (isCarrotBig == false && isAnyBig == true) {
$("div.hidden").hide("fast");
$(options.target).show("fast", function() {});
isCarrotBig=true;
}
else {
$("div.hidden").hide("fast");
isCarrotBig=false;
isAnyBig=false;
}
});
});
};
})(jQuery);
$("#showCarrot").big({target: '#carrotBig'})
您的下一步应该是调查您是否可以摆脱全局变量。我个人建议创建一个简单的jQuery插件。大概是这样的:
(function($){
$.fn.big = function(options) {
var defaults = {
target: '#carrotBig',
};
var options = $.extend(defaults, options);
return this.each(function() {
$(this).click(function () {
isBrocBig=false;
if (isCarrotBig == false && isAnyBig == false) {
$(options.target).show("fast", function() {});
isCarrotBig=true;
isAnyBig=true;
}
else if (isCarrotBig == true) {
$(options.target).hide("fast");
isCarrotBig=false;
isAnyBig=false;
}
else if (isCarrotBig == false && isAnyBig == true) {
$("div.hidden").hide("fast");
$(options.target).show("fast", function() {});
isCarrotBig=true;
}
else {
$("div.hidden").hide("fast");
isCarrotBig=false;
isAnyBig=false;
}
});
});
};
})(jQuery);
$("#showCarrot").big({target: '#carrotBig'})
然后你可以这样称呼它:
(function($){
$.fn.big = function(options) {
var defaults = {
target: '#carrotBig',
};
var options = $.extend(defaults, options);
return this.each(function() {
$(this).click(function () {
isBrocBig=false;
if (isCarrotBig == false && isAnyBig == false) {
$(options.target).show("fast", function() {});
isCarrotBig=true;
isAnyBig=true;
}
else if (isCarrotBig == true) {
$(options.target).hide("fast");
isCarrotBig=false;
isAnyBig=false;
}
else if (isCarrotBig == false && isAnyBig == true) {
$("div.hidden").hide("fast");
$(options.target).show("fast", function() {});
isCarrotBig=true;
}
else {
$("div.hidden").hide("fast");
isCarrotBig=false;
isAnyBig=false;
}
});
});
};
})(jQuery);
$("#showCarrot").big({target: '#carrotBig'})
下一步应该是研究是否可以去掉全局变量。我认为实际上不需要任何标志或if条件。我认为你的逻辑是:
- 在显示胡萝卜时切换大胡萝卜 单击
- 单击showCarrot时隐藏div.hidden
$("#showCarrot").click(function () {
$("#carrotBig").toggle("fast");
$("#div.hidden").hide();
});
.toggle将处理您的一个标志(isCarrotBig),如果div.hidden已隐藏,则.hide()将不会执行任何操作,因此它将处理您的isAnyBig标志
现在。。让我们和布罗克一起工作吧
function setupVegetable(showId, toggleId) {
$("#" + showId).click(function () {
$("#" + toggleId).toggle("fast");
$("#div.hidden").hide();
});
}
setupVegetable("showCarrot", "carrotBig");
setupVegetable("showBroc", "brocBig");
如果您感兴趣,可以进一步重构它,这样就不需要为每种蔬菜提供ID。不过,我需要查看您的HTML标记。我认为您实际上不需要任何标志或if条件。我认为你的逻辑是:
- 在显示胡萝卜时切换大胡萝卜 单击
- 单击showCarrot时隐藏div.hidden
$("#showCarrot").click(function () {
$("#carrotBig").toggle("fast");
$("#div.hidden").hide();
});
.toggle将处理您的一个标志(isCarrotBig),如果div.hidden已隐藏,则.hide()将不会执行任何操作,因此它将处理您的isAnyBig标志
现在。。让我们和布罗克一起工作吧
function setupVegetable(showId, toggleId) {
$("#" + showId).click(function () {
$("#" + toggleId).toggle("fast");
$("#div.hidden").hide();
});
}
setupVegetable("showCarrot", "carrotBig");
setupVegetable("showBroc", "brocBig");
如果您感兴趣,可以进一步重构它,这样就不需要为每种蔬菜提供ID。但我需要查看您的HTML标记。好的,我将发布一个新的答案以响应编辑 值得注意的几点:
- 移除了IMG周围的div-它们是不必要的,并且使恶棍和大图像之间的关系复杂化
- 从HTML中删除了onclick属性-您将在JS中附加事件处理程序,因此不需要这样做
- 因为缩略图和大图像之间的关系非常明显(大图像只是下一个元素),所以不需要ID来识别它们。你所需要的只是一个关于缩略图的课程
- 因为我们不使用ID,只使用类,所以您可以添加任意数量的蔬菜,而无需触摸JS
<body>
<div class="header"> <img class="imgLogo" src="img/vegtablelogo.jpg"> </div>
<div id="thumbsContainer">
<img class="imgThumb" src="img/carot.jpg" />
<img class="imgBig hidden" src="img/carot.jpg" />
<img class="imgThumb" src="img/brocoli.jpg" />
<img class="imgBig hidden" src="img/brocoli.jpg" />
</div>
<!-- end thumbs container -->
<script>
$("#thumbsContainer .imgThumb").click(function () {
var thisImgBig = $(this).next();
// Hide all imgBigs, except for this one
$("#thumbsContainer .imgBig").not(thisImgBig[0]).hide();
// Toggle this imgBig
thisImgBig.toggle();
});
$("#thumbsContainer .imgBig").click(function () {
// Hide this imgBig
$(this).hide();
});
</script>
</body>
$(“#thumbsContainer.imgThumb”)。单击(函数(){
var thisImgBig=$(this.next();
//隐藏除此之外的所有imgbig
$(“#thumbsContainer.imgBig”).not(thisImgBig[0]).hide();
//切换此imgBig
thisImgBig.toggle();
});
$(“#thumbsContainer.imgBig”)。单击(函数(){
//隐藏这个imgBig
$(this.hide();
});
好的,我将发布一个新的答案以回应编辑
值得注意的几点:
- 移除了IMG周围的div-它们是不必要的,并且使恶棍和大图像之间的关系复杂化
- 从HTML中删除了onclick属性-您将在JS中附加事件处理程序,因此不需要这样做
- 因为缩略图和大图像之间的关系非常明显(大图像只是下一个元素),所以不需要ID来识别它们。你所需要的只是一个关于缩略图的课程
- 因为我们不使用ID,只使用类,所以您可以添加任意数量的蔬菜,而无需触摸JS
<body>
<div class="header"> <img class="imgLogo" src="img/vegtablelogo.jpg"> </div>
<div id="thumbsContainer">
<img class="imgThumb" src="img/carot.jpg" />
<img class="imgBig hidden" src="img/carot.jpg" />
<img class="imgThumb" src="img/brocoli.jpg" />
<img class="imgBig hidden" src="img/brocoli.jpg" />
</div>
<!-- end thumbs container -->
<script>
$("#thumbsContainer .imgThumb").click(function () {
var thisImgBig = $(this).next();
// Hide all imgBigs, except for this one
$("#thumbsContainer .imgBig").not(thisImgBig[0]).hide();
// Toggle this imgBig
thisImgBig.toggle();
});
$("#thumbsContainer .imgBig").click(function () {
// Hide this imgBig
$(this).hide();
});
</script>
</body>
$(“#thumbsContainer.imgThumb”)。单击(函数(){
var thisImgBig=$(this.next();
//隐藏除此之外的所有imgbig
$(“#thumbsContainer.imgBig”).not(thisImgBig[0]).hide();
//切换此imgBig
thisImgBig.toggle();
});
$(“#thumbsContainer.imgBig”)。单击(函数(){
//隐藏这个imgBig
$(this.hide();
});
好的,我找到了一个简洁的(ish)解决方案,取决于每个隐藏的DIV是.next()一个。如果不是这样的话,它就不会起作用,但总体来说应该是好的。黑客
<div class="header"> <img class="imgLogo" src="img/vegtablelogo.jpg"> </div>
<div id="thumbsContainer">
<div class="thumb" id="carrotThumb"> <img id="showCarrot" class="imgThumb" src="img/carot.jpg" /> </div>
<div class="hidden" id="carrotBig"> <img class="imgBig" src="img/carot.jpg" /> </div>
<div class="thumb" id="brocThumb"> <img id="showBroc" class="imgThumb" src="img/brocoli.jpg" /> </div>
<div class="hidden" id="brocBig"> <img class="imgBig" src="img/brocoli.jpg" /> </div>
</div>
<!-- end thumbs container -->
<script>
var active = "";
$("div.thumb").click(function() {
var thumbVeg = $(this).attr("id");
var hiddenVeg = $(this).next().attr("id");
setupVeg(thumbVeg, hiddenVeg);
});
function setupVeg(thumbVeg, hiddenVeg) {
if (active != hiddenVeg) {
$("div.hidden").hide("fast");
$("#" + hiddenVeg).show("fast", function() {});
active = hiddenVeg;
}
else {
$("div.hidden").hide("fast");
active="";
}
}
$("div.hidden").click(function () {
$("div.hidden").hide("fast");
});
</script>
var active=“”;
$(“div.thumb”)。单击(函数(){
var thumbVeg=$(this.attr(“id”);
var hiddenVeg=$(this.next().attr(“id”);
setupVeg(拇指蔬菜、hiddenVeg);
});
功能设置VEG(thumbVeg、hiddenVeg){
如果(活动!=hiddenVeg){
$(“div.hidden”).hide(“fast”);
$(“#”+hiddenVeg.show(“fast”,function(){});
活动=隐藏;
}
否则{
$(“div.hidden”).hide(“fast”);
主动=”;
}
}
$(“div.hidden”)。单击(函数(){
$(“div.hidden”).hide(“fast”);
});
好的,我找到了一个简洁的(ish)解决方案,取决于每个隐藏的DIV是.next()一个。如果不是这样的话,它就不会起作用,但总体来说应该是好的。黑客
<div class="header"> <img class="imgLogo" src="img/vegtablelogo.jpg"> </div>
<div id="thumbsContainer">
<div class="thumb" id="carrotThumb"> <img id="showCarrot" class="imgThumb" src="img/carot.jpg" /> </div>
<div class="hidden" id="carrotBig"> <img class="imgBig" src="img/carot.jpg" /> </div>
<div class="thumb" id="brocThumb"> <img id="showBroc" class="imgThumb" src="img/brocoli.jpg" /> </div>
<div class="hidden" id="brocBig"> <img class="imgBig" src="img/brocoli.jpg" /> </div>
</div>
<!-- end thumbs container -->
<script>
var active = "";
$("div.thumb").click(function() {
var thumbVeg = $(this).attr("id");
var hiddenVeg = $(this).next().attr("id");
setupVeg(thumbVeg, hiddenVeg);
});
function setupVeg(thumbVeg, hiddenVeg) {
if (active != hiddenVeg) {
$("div.hidden").hide("fast");
$("#" + hiddenVeg).show("fast", function() {});
active = hiddenVeg;
}
else {
$("div.hidden").hide("fast");
active="";
}
}
$("div.hidden").click(function () {
$("div.hidden").hide("fast");
});
</script>
var active=“”;
$(“div.thumb”)。单击(函数(){
var thumbVeg=$(this.attr(“id”);
var hiddenVeg=$(this.next().attr(“id”);
setupVeg(拇指蔬菜、hiddenVeg);
});
傅