我编写了一个程序,以在单击时突出显示选定的按钮,并在单击另一个按钮时取消突出显示该按钮。它正在工作,但是我需要使其重复性降低(使用也许循环)。
var txt = $(".txt");
var xls = $(".xls");
var jpg = $(".jpg");
var png = $(".png");
var pdf = $(".pdf");
var mp3 = $(".mp3");
var mp4 = $(".mp4");
var gif = $(".gif");
var flac = $(".flac");
var html = $(".html");
var js = $(".js");
var aac = $(".aac");
var ai = $(".ai");
var avi = $(".avi");
var psd = $(".psd");
var tiff = $(".tiff");
var fileTypes = [txt, xls, jpg, png, pdf, mp3, mp4, gif, flac, html, js, aac, ai, avi, psd, tiff];
$(fileTypes[0]).click( function() {
for(i=0; i<fileTypes.length; i++)
{
fileTypes[i].removeClass("selected");
fileTypes[i].addClass("not-selected");
}
fileTypes[0].removeClass("not-selected");
fileTypes[0].addClass("selected");
});
$(fileTypes[1]).click( function() {
for(i=0; i<fileTypes.length; i++)
{
fileTypes[i].removeClass("selected");
fileTypes[i].addClass("not-selected");
}
fileTypes[1].removeClass("not-selected");
fileTypes[1].addClass("selected");
});
$(fileTypes[2]).click( function() {
for(i=0; i<fileTypes.length; i++)
{
fileTypes[i].removeClass("selected");
fileTypes[i].addClass("not-selected");
}
fileTypes[2].removeClass("not-selected");
fileTypes[2].addClass("selected");
}); // It does this 16 times, the length of the fileTypes array
我尝试使用for循环来解决此问题,但未成功。 请帮忙。谢谢。
答案 0 :(得分:3)
也许您可以通过执行以下操作来简化脚本:
var extensions = ['.txt',
'.xls',
'.jpg',
'.png',
'.pdf',
'.mp3',
'.mp4',
'.gif',
'.flac',
'.html',
'.js',
'.aac',
'.ai',
'.avi',
'.psd',
'.tiff']
// Create a selector that selects all classes in
// the extensions array
var selector = extensions.join(',');
// Assign a click handler to each element in the
// selected string
$(selector).click(function() {
// When clicked, remove the selected
// class, and add not-selected to all
// elements in the selector
$(selector)
.removeClass('selected')
.addClass('not-selected')
// For this item, remove not-selected
// class and add selected class
$(this)
.removeClass('not-selected')
.addClass('selected')
})
.selected {
background:red;
}
.not-selected {
background:white;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<button class="txt">txt</button>
<button class="xls">xls</button>
<button class="jpg">jpg</button>
<button class="png">png</button>
<button class="pdf">pdf</button>
<button class="mp3">mp3</button>
<button class="mp4">mp4</button>
<button class="gif">gif</button>
<button class="flac">flac</button>
<button class="html">html</button>
<button class="js">js</button>
<button class="aac">aac</button>
<button class="ai">ai</button>
<button class="avi">avi</button>
<button class="psd">psd</button>
<button class="tiff">tiff</button>
答案 1 :(得分:0)
像这样吗?
var toggelf = function(event) {
for(i=0; i<fileTypes.length; i++)
{
fileTypes[i].switchClass("selected","not-selected");
}
$(event.currentTarget).switchClass("not-selected","selected");
}
for(i=0; i<fileTypes.length; i++)
{
$(fileTypes[i]).click(toggelf);
}
我没有测试它,但是它应该可以工作。基本上,我创建了一个匿名函数,将其分配给变量,并将其用作单击所有对象的处理程序。
答案 2 :(得分:0)
我希望不必在javascript中定义每种类型,而使用dom本身来定义类型(无论您喜欢什么)。这可以通过将对象包装在容器中来实现。例如:
const buttons = '.buttons button'
$(buttons).click(function() {
$(buttons).removeClass('selected')
$(this).addClass('selected')
})
.selected {
background:red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<div class="buttons">
<button>txt</button>
<button>xls</button>
<button>jpg</button>
<button>png</button>
<button>pdf</button>
<button>mp3</button>
<button>mp4</button>
<button>gif</button>
<button>flac</button>
<button>html</button>
<button>js</button>
<button>aac</button>
<button>ai</button>
<button>avi</button>
<button>psd</button>
<button>tiff</button>
</div>
我也不会同时选择和未选择类,因为这是多余的。
请注意,我这样做的原因是,您不应同时在dom和javascript中复制文件类型集;只是选一个地方。最终,我更愿意使用诸如react之类的方法完全从javascript内部驱动数据,但是使用jquery可以在dom中进行描述。