freislot
@freislot
Frontend-разработчик

Есть ли способ сократить код?

В javascript/jquery не разбираюсь, возникла задача при наведении на ячейку таблицы подсвечивать все соседние ячейки в этой СТРОКЕ. Таблица сверстана div'ами на bootstrap, соответственно у каждой ячейки есть классы. Вот мой гуглокод, все работает как надо, но мне кажется есть более лаконичное решение моей задачи, подскажите пожалуйста так ли это? Приветствуются все ответы и направления "в какую сторону копать".

Реализовано именно через addClass/removeClass, т.к в случае использования toggleClass, я обнаружил баг, если при загрузке страницы мышка наведена на какую-либо из ячеек, описанных в скрипте, то срабатывал toggleClass, и скрипт работал не правильно, т.е при hover табличка была белой, убираем hover появляется класс gray. А мне нужно наоборот, потому написал так.

<script type="text/javascript">
$(document).ready(function(){
	$( "#tabl1 .type" ).hover(
	  function() {
		$( "#tabl1 .type" ).addClass( "gray" );
	  }, function() {
		$( "#tabl1 .type" ).removeClass( "gray" );
	  }
	);
	$( "#tabl1 .price" ).hover(
	  function() {
		$( "#tabl1 .price" ).addClass( "gray" );
	  }, function() {
		$( "#tabl1 .price" ).removeClass( "gray" );
	  }
	);	

	$( "#tabl1 .params" ).hover(
	  function() {
		$( "#tabl1 .params" ).addClass( "gray" );
	  }, function() {
		$( "#tabl1 .params" ).removeClass( "gray" );
	  }
	);
	
	$( "#tabl2 .type" ).hover(
	  function() {
		$( "#tabl2 .type" ).addClass( "gray" );
	  }, function() {
		$( "#tabl2 .type" ).removeClass( "gray" );
	  }
	);
	$( "#tabl2 .price" ).hover(
	  function() {
		$( "#tabl2 .price" ).addClass( "gray" );
	  }, function() {
		$( "#tabl2 .price" ).removeClass( "gray" );
	  }
	);	

	$( "#tabl2 .params" ).hover(
	  function() {
		$( "#tabl2 .params" ).addClass( "gray" );
	  }, function() {
		$( "#tabl2 .params" ).removeClass( "gray" );
	  }
	);
	
	$( "#tabl2 .params2" ).hover(
	  function() {
		$( "#tabl2 .params2" ).addClass( "gray" );
	  }, function() {
		$( "#tabl2 .params2" ).removeClass( "gray" );
	  }
	);
	
	$( "#tabl3 .type" ).hover(
	  function() {
		$( "#tabl3 .type" ).addClass( "gray" );
	  }, function() {
		$( "#tabl3 .type" ).removeClass( "gray" );
	  }
	);
	$( "#tabl3 .price" ).hover(
	  function() {
		$( "#tabl3 .price" ).addClass( "gray" );
	  }, function() {
		$( "#tabl3 .price" ).removeClass( "gray" );
	  }
	);	

	$( "#tabl3 .params" ).hover(
	  function() {
		$( "#tabl3 .params" ).addClass( "gray" );
	  }, function() {
		$( "#tabl3 .params" ).removeClass( "gray" );
	  }
	);	
	
});
</script>


Всем спасибо за отзывы,
Александр Миранович упростил мой код, большое спасибо ему.
Его реализация кода jsfiddle.net/f48ZD/493
  • Вопрос задан
  • 402 просмотра
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 4
petermzg
@petermzg
Самый лучший программист
Это все можно сделать просто на CSS, без javascript. Код сократиться до 0 строк.
Ответ написан
Комментировать
@RoxT
создаю эти ваши интернеты
у вас на картинке больше похоже что вы столбцы пытаетесь подсвечивать
.col-sm-2:hover > div {
    border-style: solid;
    border-color: #35146d;
}

может можно чисто css обойтись?
Ответ написан
Raxen
@Raxen
Lead Frontend Developer, Beeline
Если нужна именно jquery реализация, то
$( ".type,.price,.params,.params2" ).hover(function() {
       $( this ).addClass( "gray" );
    }, function() {
       $( this ).removeClass( "gray" );
    }
);
Ответ написан
daglob
@daglob
PHP developer
как на счет такого решения?
<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"
	      integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
	<!-- Optional theme -->
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css"
	      integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
	<style type="text/css">
		.grey {
			background-color: #cccccc;
		}
	</style>
</head>
<body>
<div class="content">
	<div class="row a">
		<div class="col-md-4 el-col">1</div>
		<div class="col-md-4 el-col">2</div>
		<div class="col-md-4 el-col">3</div>
	</div>
	<div class="row b ">
		<div class="col-md-4 el-col">1</div>
		<div class="col-md-4 el-col">2</div>
		<div class="col-md-4 el-col">3</div>
	</div>
	<div class="row c">
		<div class="col-md-4 el-col">1</div>
		<div class="col-md-4 el-col">2</div>
		<div class="col-md-4 el-col">3</div>
	</div>
	<script src="https://code.jquery.com/jquery-2.2.2.min.js"
	        integrity="sha256-36cp2Co+/62rEAAYHLmRCPIych47CvdM+uTBJwSzWjI=" crossorigin="anonymous"></script>
	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"
	        integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS"
	        crossorigin="anonymous"></script>
	<script>
		$(function () {
			var a = $(".el-col");
			a.hover(
				function () {
					var self = $(this), parent = self.parent('.row');
					parent.addClass('grey');
				},
				function () {
					var self = $(this), parent = self.parent('.row');
					parent.removeClass('grey');
				}
			);
		})
	</script>
</div>
</body>
</html>


Здесь же можно и для столбцов задать стиль...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы