chr*_*ark 12 javascript sorting jquery
这个问题主要集中在如何在开发代码时管理代码,使其具有高适应性等.让我通过这个例子来解释,它会更有意义."如果我需要的话,我会加上赏金."
我们的服务器内存紧张,我们正在使用Javascript/Jquery将大量的排序工作推到客户端,以缓解这些问题.如果你想跟随,这就是小提琴.https://jsfiddle.net/ydc6ywuz/23/
这个代码带来了问题.
var sortSubSite = $('.AccessSitesLinks.False');
var subArr = sortSubSite.map(function(_, o){
return {
t: $(o).text(),
h: $(o).attr('href'),
c: $(o).attr('class')
};
}).get();
sortSubSite.each(function(i, o) {
var classList = $(o).attr('class').split(/\s+/);
$('.ContainingBox.AccessSitesLinks.True.'+ classList[2]).append($(o));
$(o).wrap("<div class='ContainingBox2'></div>");
$(o).text(subArr[i].t);
$(o).attr('href', subArr[i].h);
$(o).attr('class', subArr[i].c + classList[2]);
});
Run Code Online (Sandbox Code Playgroud)
每个Home站点都有这个类AccessSitesLinks True [Num].所以它的所有子网都会有AccessSitesLinks False [Num].我理解sortSubSite和SubSite是相似的,可以组合起来以便更具可扩展性,这也是问题的一部分.
新的业务要求是能够SubSites按字母顺序排序.这就是问题发挥作用的地方.如何使用现有代码并重构它以不断满足业务需求?我可以像我一样使代码排序Home Sites,但是,这似乎不可扩展,只是创建另一个函数来调用.我有科技部的变量,数组和函数按字母顺序排序已.从设计角度来看,我有什么遗漏的东西吗?这只是缺乏经验,所以我无法看到如何正确设计?
编辑
我想更多地澄清这个问题.是的,我$(o)多次获得该对象,这可能效率低下.这个问题更多的是关于如何重新设计,而编码仍在继续,而不是持续的片断代码.
$(document).ready(function() {
setFields();
});
function setFields() {
var sortSite = $('.AccessSitesLinks.True');
var arr = sortSite.map(function(_, o) {
return {
t: $(o).text(),
h: $(o).attr('href'),
c: $(o).attr('class')
};
}).get();
arr.sort(function(o1, o2) {
return o1.t > o2.t ? 1 : o1.t < o2.t ? -1 : 0;
});
sortSite.each(function(i, o) {
$(o).text('+');
$(o).attr('href', arr[i].h);
$(o).attr('class', arr[i].c);
$(o).wrap("<div class='ContainingBox " + arr[i].c + "'></div>");
/// arr[i]c is: AccessSitesLinks True
$(o).removeAttr('href');
$(o).parent().append("<a href='" + arr[i].h + "' class='" + arr[i].c + "'>" + arr[i].t + "</a>");
});
var sortSubSite = $('.AccessSitesLinks.False');
var subArr = sortSubSite.map(function(_, o) {
return {
t: $(o).text(),
h: $(o).attr('href'),
c: $(o).attr('class')
};
}).get();
// Changes started from here
subArr.sort(function(o1, o2) {
return o1.t > o2.t ? 1 : o1.t < o2.t ? -1 : 0;
});
$.each(subArr, function(i, o) {
var a = $("." + o.c.split(" ").join(".") + '[href="' + o.h + '"]');
var n = o.c.split(" ")[2];
a.appendTo($('.ContainingBox.AccessSitesLinks.True.' + n));
$(a).removeClass(n).addClass(n + n).wrap("<div class='ContainingBox2'></div>");
// Changes ended here and below commented is your code
/*var classList = $(o).attr('class').split(/\s+/);
$('.ContainingBox.AccessSitesLinks.True.'+ classList[2]).append($(o));
$(o).wrap("<div class='ContainingBox2'></div>");
$(o).text(subArr[i].t);
$(o).attr('href', subArr[i].h);
$(o).attr('class', subArr[i].c + classList[2]);*/
});
$('.ContainingBox2').hide();
$('.ContainingBox').click(function() {
$('.ContainingBox2', this).toggle(); // p00f
});
$(".ContainingBox2").on({
mouseenter: function() {
$(this).data('bg2', $(this).css("background-color"));
$(this).css("background-color", "#e5f2ff");
},
mouseleave: function() {
$(this).css("background-color", $(this).data('bg2'));
}
});
}Run Code Online (Sandbox Code Playgroud)
.ContainingBox2 {
padding: 2px 15%;
}
.AccessSitesLinks.True {
padding: 2px 2%;
font-size: 1.2em;
width: 80%;
}
.AccessSitesLinks {
text-decoration: none !Important;
font-family: "Segoe UI", "Segoe", Tahoma, Helvetica, Arial, sans-serif;
color: #444;
font-size: 1em;
width: 80%;
margin: 2px
}Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<a href="https://en.wikipedia.org" id="GUID" class="AccessSitesLinks True 1">Wikipedia Home</a>
<a href="https://en.wikipedia.org/wiki/Gold" id="GUID" class="AccessSitesLinks False 1">Wikipedia Gold</a>
<a href="https://google.com" id="GUID" class="AccessSitesLinks True 2">Google Home</a>
<a href="https://mail.google.com/" id="GUID" class="AccessSitesLinks False 2">Google Mail</a>
<a href="https://facebook.com/User1" id="GUID" class="AccessSitesLinks False 3">FaceBook User1</a>
<a href="https://facebook.com" id="GUID" class="AccessSitesLinks True 3">FaceBook Home</a>
<a href="https://facebook.org/about" id="GUID" class="AccessSitesLinks False 3">FaceBook About</a>
<a href="https://young.com" id="GUID" class="AccessSitesLinks False 2">zzzzzz</a>
<a href="https://younger.com" id="GUID" class="AccessSitesLinks True 0">A</a>
<a href="https://youngest.com" id="GUID" class="AccessSitesLinks False 0">zzzzzz</a>
<a href="https://facebook.com/a" id="GUID" class="AccessSitesLinks False 3">FaceBook a</a>
</div>Run Code Online (Sandbox Code Playgroud)
在上面的回答中,我改变了你尝试对二级链接进行排序的方式.
我对第subArr一个进行了排序,然后根据subArr相应父链接中的信息添加了链接.
我用注释标记了更改的脚本.