Div没有根据类别进行排序

时间:2017-05-23 11:26:46

标签: javascript jquery css

我发现this article应该与我正在寻找的内容相关,即按类对列表进行排序。但是,在我的代码中,它没有用。所以我试图弄清楚如何解决问题。我有两个班,"离线"和"无"。我想要课程"离线"来到顶级和班级#34;没有"显示在"离线"底部区域。我在每个div中还有一个课程,其中包括" indbox"因此,我尝试使用" getElementsByClassName "但它不起作用。

这是我的code from codepen



$(document).ready(function() {
  
  $(".con-button").click(function(){
    
    var cssObj = {};
  cssObj.left = $(this).position().left;
  cssObj.width = $(this).outerWidth();
    $(".controls .effect").css( cssObj );
    
    if(this.id == "c-all") {
      $('.offline').hide();
      $('.offline').fadeIn("slow").show();
      $('.online').hide();
    $('.online').fadeIn("slow").show();
      $('.none').fadeIn("slow").show();
    } else if (this.id == "c-online") {
      $('.offline').hide();
      $('.online').hide();
    $('.online').fadeIn("slow").show();
      $('.none').hide();
    } else if (this.id == "c-offline") {
      $('.offline').hide();
      $('.offline').fadeIn("slow").show();
    $('.online').hide();
      $('.none').hide();
    }
  });
  $(".con-button").eq(0).trigger("click");
  
  getSteams();
  
  var elem = $('#offline').find('div').sort(sortMe);
  
  function sortMe(a, b) {
    
        return a.getElementsByClassName("offline") < b.getElementsByClassName("none");
  }
  
  $('#offline').append(elem);
  
});

var channels = ["BasicallyIDoWrk", "FreeCodeCamp", "Golgothus", "OgamingSC2", "maatukka", "Vinesauce", "brunofin", "comster404", "esl_csgo"];

  var cb = "?client_id=egn4k1eja0yterrcuu411n5e329rd3&callback=?";

function getSteams() {
  
  channels.forEach(function(indchannel) {
  //for (var channel in channels) {
    //var indchannel = channel;
  var streamURL = "https://api.twitch.tv/kraken/streams/" + indchannel + cb;
    
  var channelURL = "https://api.twitch.tv/kraken/channels/" + indchannel + cb;
  
  $.ajax({
      url: streamURL,
      type: 'GET',
      dataType: "jsonp",
      data: {
        //action: 'query',
        format: 'json',
      },
    headers: {
      "Accept": "application/vnd.twitchtv.v5+json",
    },
    success: function(data) {
    
      var game;
      var status;
      
      if(data.stream === null) {
        
        $.getJSON(data._links.channel + "/?client_id=egn4k1eja0yterrcuu411n5e329rd3&callback=?", function(data2) {
          if(data2.status == 404) {
            game = "The Account doesn't exist";
        status = "none";
          } else {
            game = "Offline";
        status = "offline";
          }
          
          $("#offline").append('<div class="indbox ' + status + '"><a target="_blank" href="#">'+ indchannel + '<br/>' + game +'</a></div>');
          
        } );
        
      } else {
        game = data.stream.game;
        status = "online";
        
        $("#online").append('<div class="indbox ' + status + '"><a target="_blank" href="#">'+ indchannel + '<br/>' + game +'</a></div>');
        
      };
      
       
    }
  
  
  });
  });
}
&#13;
html, body{
  height:100%;
  margin: 0;
  background-color: #ffffff;
}
.wrapper {
  text-align: center;
  position: relative;
  width: 100%;
  height: 100%;
  display:block;
}
.container {
  width: 75%;
  margin: 30px auto 0;
  position: relative;
}
.logobox img {
  width: 20%;
  margin: 0 auto;
}
.controls {
  position: relative;
  width: 100%;
}
.con-button {
  position: relative;
  background-color: white;
  border: none;
	margin: 0.5em 0 0 0;
	padding: 0.5em 1em 0.5em 1em;
  text-align: center;
	color: rgb(100,65,164);
  font-size: 20px;
  transition: .4s;
}
.con-button:hover {
  cursor: pointer;
  /*border-bottom: 3px solid rgba(224, 217, 236, 1);*/
}
.con-button:focus {outline: 0;}

.divider hr {
  border-top: 1px solid #6441A4;
}

.effect {
  position: absolute;
  display: block;
  left: 0;
  bottom: 5px;
  height: 2px;
  width: 60px;
  transition: 0.4s ease-in-out;
   /*border-bottom: 3px solid rgba(100, 65, 164, 1);*/
  background: #6441A4;
}

.indbox {
  width: 100%;
  display: block;
  margin: 5px 0px;
  padding: 8px 0px;
}

.online {
  background-color: #98FB98;
}
.offline {
  background-color: #ff9999;
}
.none {
  background-color: #D3D3D3;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
  <div class="container">
    <div class="twitchtvarea">
      <div class="logobox">
        <img src="https://s6.postimg.org/bay7stotd/Twitch_Purple_RGB.png" />
      </div>
      <div class="twitchbox">
        <div class="controls">
          <button id="c-all" class="con-button active" type="button">All</button>
				<button id="c-online" class="con-button" type="button">Online</button>
				<button id="c-offline" class="con-button" type="button">Offline</button>	
          <div class="effect"></div>
        </div>
        <div class="divider"><hr></div>
        <div id="online"></div>
        <div id="offline"></div>
      </div>
    </div>
  </div>
</div>
&#13;
&#13;
&#13;

我希望您关注的代码是:

var elem = $('#offline').find('div').sort(sortMe);

  function sortMe(a, b) {

        return a.getElementsByClassName("offline") < b.getElementsByClassName("none");
  }

  $('#offline').append(elem);

请帮我解决。

2 个答案:

答案 0 :(得分:0)

查看您的代码,我发现您正在使用此Sort Function;但是,你的做法是不正确的。在示例中,他们有:

function compare(a, b) {
  if (a is less than b by some ordering criterion) {
    return -1;
  }
  if (a is greater than b by the ordering criterion) {
    return 1;
  }
  // a must be equal to b
  return 0;
}

所以为了排序&#34;离线&#34;在&#34; none&#34;之前,你的函数必须返回1

function sortMe(a, b){
    if (a.hasClass("offline")) {
        return 1; //if an element has offline, move it above.
    } else {
        return -1; //if an element doesn't have offline, it means it's none. Move it down.
    }
}

您可能希望添加条件以检查它们是否都具有脱机类。

答案 1 :(得分:0)

您的问题可以通过以下方式解决:

appendTo();

方法。

而不是:

append();

方法

我在你的html代码中添加了两个额外的div,并对你的javascript代码进行了一些小改动它的工作原理!!!

html如下:

   <div class="divider"><hr></div>
    <div id="online"></div>
    <div id="offline">
      <div class="notconnected"></div>
      <div class="nonexisting"></div>
    </div>
  </div>

并且javascript在这里被更改了:

if(data2.status == 404) {
        game = "The Account doesn't exist";
        status = "none";
      } 
else {
        game = "Offline";
        status = "offline";
      }
      if(status==="none"){
       $('<div class="indbox ' + status + '" id="'+status+'"><a target="_blank" href="#">'+ indchannel + '<br/>' + game +'</a></div>').appendTo(".nonexisting");}

      else{
        $('<div class="indbox ' + status + '" id="'+status+'"><a target="_blank" href="#">'+ indchannel + '<br/>' + game +'</a></div>').appendTo(".notconnected");
      }  
    } );

该方法的文档位于:appendTo()