2015-02-10 74 views
-3

这是一个2部分的问题。使用javascript或jquery进行div排序?

1)我正在寻找按字母顺序排列div,有人帮我做,它适用于Firefox和Chrome,但它不能在IE8中工作,因为你必须填充阵列,我没有想法该怎么做。一位好友告诉我你可以使用Jquery,它可以在所有浏览器中使用。那么是否有一种方法可以按照字母顺序用Jquery对div进行排序,所以我不必填充数组(我不知道该怎么做)或者是否有一个带有IE8解决方案的JavaScript?

我是新来编码,所以一个工作示例将非常有帮助。谢谢!

这里是JavaScript和的div:

var VanillaRunOnDomReady = function() { 
 
var main = document.getElementById('main'); 
 

 
[].map.call(main.children, Object).sort(function (a, b) { 
 
    return a.id > b.id; 
 
}).forEach(function (elem) { 
 
    main.appendChild(elem); 
 
}); 
 
} 
 
var alreadyrunflag = 0; 
 

 
if (document.addEventListener) 
 
    document.addEventListener("DOMContentLoaded", function(){ 
 
     alreadyrunflag=1; 
 
     VanillaRunOnDomReady(); 
 
    }, false); 
 
else if (document.all && !window.opera) { 
 
    document.write('<script type="text/javascript" id="contentloadtag" defer="defer" src="javascript:void(0)"><\/script>'); 
 
    var contentloadtag = document.getElementById("contentloadtag") 
 
    contentloadtag.onreadystatechange=function(){ 
 
     if (this.readyState=="complete"){ 
 
      alreadyrunflag=1; 
 
      VanillaRunOnDomReady(); 
 
     } 
 
    } 
 
} 
 

 
window.onload = function(){ 
 
    setTimeout("if (!alreadyrunflag){VanillaRunOnDomReady}", 0); 
 
}
<div id="main"> 
 
<div id="danger">7</div> 
 
<div id="angel">1</div> 
 
<div id="enormous">8</div> 
 
<div id="correct">4</div> 
 
<div id="forever">11</div> 
 
<div id="backyard">2</div> 
 
</div>

2)是否有周围翻转顺序(EI从脚本 - Z到Z - A)当某一日期通行证。例如,从本月的第一个月到本月的第15天,我希望第1部分的脚本按字母顺序排列(a - z),但是从第16天到第31天,相反(z - a)。我需要脚本来更改其他脚本还是可以在上面的第一个脚本中实现?

+0

IE11似乎没有对此进行排序。看起来像一个错误。 – Mouser 2015-02-10 23:26:16

+0

更正,IE似乎以不同的方式实现。 – Mouser 2015-02-10 23:58:19

回答

1

我修复了IE(所有版本)的排序问题,再加上IE8的排序机制。 (尽管IE8解决方案应该可以在所有浏览器中运行)。

var VanillaRunOnDomReady = function() { 
 
    var main = document.getElementById('main'); 
 

 
\t if (Array.prototype.map && Array.prototype.forEach) 
 
\t { 
 
\t \t //this funky bit can be done by all modern browsers. Sorting fixed for IE. 
 
\t Array.prototype.map.call(main.children, Object).sort(function (a, b) { 
 
\t \t if (a.id > b.id) return 1; 
 
\t \t if (a.id < b.id) return -1; 
 
\t \t return 0; 
 
\t \t }).forEach(function(element){ 
 
\t \t main.appendChild(element); 
 
\t \t }); 
 
\t } 
 
\t else 
 
\t { 
 
     //this bit uses old fashioned coding. No querySelectors and fancy array functions. 
 
\t \t var allDivs = main.childNodes; 
 
\t \t var store = []; 
 
     
 
     //push all divs into an array 
 
\t \t for (var i = 0; i < allDivs.length; ++i) 
 
\t \t { 
 
\t \t \t if (allDivs[i].nodeType != 3 && allDivs[i].tagName && allDivs[i].tagName.toLowerCase() == "div") 
 
\t \t \t { 
 
\t \t \t \t store.push(allDivs[i]); 
 
\t \t \t } 
 
\t \t } 
 
\t \t 
 
     //sort the array 
 
\t \t store.sort(function (a, b) { 
 
\t \t if (a.id > b.id) return 1; 
 
\t \t if (a.id < b.id) return -1; 
 
\t \t return 0; 
 
\t \t }); 
 
\t \t 
 
     //reset the sorted divs.  
 
\t \t for (var i = 0; i < store.length; ++i) 
 
\t \t { 
 
\t \t \t main.appendChild(store[i]); 
 
\t \t } 
 
\t } 
 
\t } 
 
\t var alreadyrunflag = 0; 
 

 
    if (document.addEventListener){ 
 
     document.addEventListener("DOMContentLoaded", function(){ 
 
      alreadyrunflag=1; 
 
      VanillaRunOnDomReady(); 
 
     }, false); 
 
\t } 
 
    else if (document.all && !window.opera) { 
 
\t \t \t VanillaRunOnDomReady(); 
 
\t \t \t alreadyrunflag = 1; 
 
\t } 
 

 
    
 

 
    window.onload = function(){ 
 
     setTimeout("if (!alreadyrunflag){VanillaRunOnDomReady}", 0); 
 
    }
<div id="main"> 
 
    <div id="danger">7</div> 
 
    <div id="angel">1</div> 
 
    <div id="enormous">8</div> 
 
    <div id="correct">4</div> 
 
    <div id="forever">11</div> 
 
    <div id="backyard">2</div> 
 
    </div>

至于第二个:

我只想分裂的div量分为两组。一到十五,一到十六。然后对它们进行适当的排序并将它们附加到main div

+0

它工作得很好!感谢您的快速答复。现在对于第二个,我不确定我是否明白你的意思。我之所以问自己是否有脚本自动翻转订单,是因为我想创建一组div,而不必复制它们。有没有办法将它整合到上面的代码中,还是完全不同的脚本? – Felipe 2015-02-11 12:08:48

+0

我刚刚在你提供的代码之前使用了一个if或else语句,并帮助排序日期。再次感谢! – Felipe 2015-02-11 15:48:23

相关问题