Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Оптимизация одного большого костыля. (https://javascript.ru/forum/events/74170-optimizaciya-odnogo-bolshogo-kostylya.html)

Eugeniy 19.06.2018 17:13

Оптимизация одного большого костыля.
 
Доброго времени суток форумчане!) Сразу говорю только недавно начал изучение и прошу помощи:help: !. Это рабочий пагинатор с переключением. Вот хотелось бы что бы Господа по умнее подсказали где можно оптимизировать , как сделать по лучше.
P.S. чур не кидаться ссаными тряпками. я пишу тут не для обсуждения качества моего кода а для помощи его доработки и улучшения. спасибо за понимание.:thanks:
//	пагинатор на комментарии
	
	var LengthMessageComments = jQuery('.vbMessageChildren').length;
	var ObjMessageComments = jQuery('.vbMessageChildren');
	var q;
	for (q = 0; q < LengthMessageComments; q++){
		
	var GetLength = jQuery(ObjMessageComments[q]).children('.vbMessage').length;
	if(GetLength > 3){
	var paginatorStep = Math.ceil(GetLength / 3);
	var ObjComment = jQuery(ObjMessageComments[q]).children('.vbMessage');
	var r;
	for (r = 0; r < GetLength; r++){
		jQuery(ObjComment[r]).attr('id', r);
		if(jQuery(ObjComment[r]).attr( "id") > 2){
			jQuery(ObjComment[r]).hide();
		}
		};
	var leftPg = "<img class='prew' src='путь к файлу'>"
	var rightPg = "<img class='next' src='путь к файлу'>"
	jQuery(ObjMessageComments[q]).append( leftPg + "<ul class='paginator'></ul>" + rightPg);
	var e;
	var id = 1;
	for(e = 0; e < paginatorStep; e++){
	jQuery(ObjMessageComments[q]).children('.paginator').append( "<li id="+ id +">"+ id +"</li>" );
	id++;
	}
	};		
	}
	
	//	Переключение пагинатора
	
	jQuery('.paginator').children('li').click(function(){
	  jQuery(this).parent().children('li').removeClass('here');
	  jQuery(this).addClass('here');
	  var Qnty = jQuery(this).attr( "id");
	  var ObjCheckId = jQuery(this).parents( ".vbMessageChildren" ).children('.vbMessage');
	  var LengthObjCheckId = jQuery(this).parents( ".vbMessageChildren" ).children('.vbMessage').length;
	  jQuery(this).parents( ".vbMessageChildren" ).children('.vbMessage').hide();
	  var OneQnty = Qnty * 3 - 1;
	  var SecQnty = Qnty * 3 - 2;
	  var ThsQnty = Qnty * 3 - 3;
	  var s;
	  for (s = 0; s < LengthObjCheckId; s++){
		  if(jQuery(ObjCheckId[s]).attr( "id") == OneQnty ||
			 jQuery(ObjCheckId[s]).attr( "id") == SecQnty ||
			 jQuery(ObjCheckId[s]).attr( "id") == ThsQnty){	ObjCheckId[s].show();  }
	  }
	});
	jQuery('.vbMessageChildren').children('.prew').click(function(){
	var getId = jQuery(this).next().children('.here').attr( "id");
	if(getId != 1){
	  jQuery(this).next().children('.here').removeClass('here').prev().addClass('here');
	  var Qnty = getId - 1;
	  var ObjCheckId = jQuery(this).parents( ".vbMessageChildren" ).children('.vbMessage');
	  var LengthObjCheckId = jQuery(this).parents( ".vbMessageChildren" ).children('.vbMessage').length;
	  jQuery(this).parents( ".vbMessageChildren" ).children('.vbMessage').hide();
	  var OneQnty = Qnty * 3 - 1;
	  var SecQnty = Qnty * 3 - 2;
	  var ThsQnty = Qnty * 3 - 3;
	  var s;
	  for (s = 0; s < LengthObjCheckId; s++){
		  if(jQuery(ObjCheckId[s]).attr( "id") == OneQnty ||
			 jQuery(ObjCheckId[s]).attr( "id") == SecQnty ||
			 jQuery(ObjCheckId[s]).attr( "id") == ThsQnty){	ObjCheckId[s].show();  }
	  }
	}
	});
	jQuery('.vbMessageChildren').children('.next').click(function(){
	var getId = jQuery(this).prev().children('.here').attr( "id");
	var LastId = jQuery(this).prev().children('li:last-child').attr( "id");
	if(getId != LastId){
	  jQuery(this).prev().children('.here').removeClass('here').next().addClass('here');
	  getId++;
	  var Qnty = getId;
	  console.log(Qnty);
	  var ObjCheckId = jQuery(this).parents( ".vbMessageChildren" ).children('.vbMessage');
	  var LengthObjCheckId = jQuery(this).parents( ".vbMessageChildren" ).children('.vbMessage').length;
	  jQuery(this).parents( ".vbMessageChildren" ).children('.vbMessage').hide();
	  var OneQnty = Qnty * 3 - 1;
	  var SecQnty = Qnty * 3 - 2;
	  var ThsQnty = Qnty * 3 - 3;
	  var s;
	  for (s = 0; s < LengthObjCheckId; s++){
		  if(jQuery(ObjCheckId[s]).attr( "id") == OneQnty ||
			 jQuery(ObjCheckId[s]).attr( "id") == SecQnty ||
			 jQuery(ObjCheckId[s]).attr( "id") == ThsQnty){	ObjCheckId[s].show();  }
	  }
	}
	});
		
	var LngInptHere = jQuery('.paginator').length;
	var InptHere = jQuery('.paginator');
	var t;
	for(t = 0;t < LngInptHere; t++){
		jQuery(InptHere[t]).children('li:first').addClass('here')
	}

Nexus 20.06.2018 09:27

Я бы еще и избавился по возможности от написания кода в блоке if, это, по-моему, улучшает его чтение.
var $messageComments = $('.vbMessageChildren');
$messageComments.each(function(index, element) {
    var $messageComment = $(element);
    var $comments = $messageComment.children('.vbMessage');
    if ($comments.length <= 3)
        return;


    $comments.each(function(index, element) {
        var $comment = $(element);
        $comment.attr('id', index);
        if (index > 2)
            $comment.hide();
    });
    var step = Math.ceil($comments.length / 3);
    var html = '<img class="prew" src="путь к файлу"><ul class="paginator">';
    for (var id = 1; id <= step; id++)
        html += '<li id="' + id + '">' + id + '</li>';

    html += '</ul><img class="next" src="путь к файлу">';
    $messageComment.append(html);
});


PS. у Rise в строке 11 используется переменная $comment, вероятно опечатка и должно быть $comments. +не понял, почему значение переменной step не было округлено до большего.

Eugeniy 20.06.2018 23:42

Благодарю за ответы)


Часовой пояс GMT +3, время: 13:23.