Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Поменять местами классы дивам (https://javascript.ru/forum/jquery/65409-pomenyat-mestami-klassy-divam.html)

Black_Star 17.10.2016 11:50

Поменять местами классы дивам
 
Добрый день уважаемые. Подскажите как решить такую задачу.

Есть такая разметка

<div id="full">
<div class="square Namber1">1</div>
<div class="square Namber2">2</div>
<div class="square Namber3">3</div>
</div>

По нажатию на один из элементов этого блока, этому диву прибавляется класс .circle (Допустим нажали на 1 получили <div class="square Namber1 circle"> )

Если нажимаем на тот же див, ничего не происходит.
Если ещё раз нажать на элемент из блока full (другой див, допустим 2 ) необходимо что б уже этому диву добавился класс circle (у изначального дива он убрался) и произошла замена классов Namber. То есть, у того изначального с классом circle стало Namber2 а у второго Namber1. Ну и так далие для других дивов, при нажатие происходило бы удаление и классы менялись бы местами.

Подскажите, пожалуйста. :)

ksa 17.10.2016 14:08

Цитата:

Сообщение от Black_Star
По нажатию на один из элементов этого блока, этому диву прибавляется класс .circle (Допустим нажали на 1 получили <div class="square Namber1 circle"> )

Если нажимаем на тот же див, ничего не происходит.
Если ещё раз нажать на элемент из блока full (другой див, допустим 2 ) необходимо что б уже этому диву добавился класс circle (у изначального дива он убрался)

Это вовсе просто...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
.circle {
	border: 1px solid red;
}
</style>
<script type='text/javascript'>
$(function(){
	$('#full > div').click(function(){
		if ($(this).hasClass('circle')) {
			return;
		};
		$(this).parent().find('.circle').removeClass('circle');
		$(this).addClass('circle');
	});
});
</script>
</head>
<body>
<div id="full">
	<div class="square Namber1">1</div>
	<div class="square Namber2">2</div>
	<div class="square Namber3">3</div>
</div>
</body>
</html>

ksa 17.10.2016 14:20

Ну и типа окончательный вариант...

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
.circle {
	border: 1px solid red;
}
.Namber1 {
	color: red;
}
.Namber2 {
	color: green;
}
.Namber3 {
	color: blue;
}
</style>
<script type='text/javascript'>
$(function(){
	$('#full > div').click(function(){
		var o1=$(this);
		if (o1.hasClass('circle')) {
			return;
		};
		var e1=o1.get(0);
		var o2=o1.parent().find('.circle');
		if (o2.length==0) {
			o1.addClass('circle');
			return;
		};
		o2.removeClass('circle');
		o1.addClass('circle');
		var e2=o2.get(0);
		var c1=e1.className.match(/Namber\d+/)[0];
		var c2=e2.className.match(/Namber\d+/)[0];
		alert(c2+'<->'+c1);
		o1.removeClass(c1);
		o2.removeClass(c2);
		o1.addClass(c2);
		o2.addClass(c1);
	});
});
</script>
</head>
<body>
<div id="full">
	<div class="square Namber1">1</div>
	<div class="square Namber2">2</div>
	<div class="square Namber3">3</div>
</div>
</body>
</html>

Black_Star 17.10.2016 16:02

Спасибо. :thanks:

Буду ещё очень признателен если растолкуете что происходит здесь -
var e1=o1.get(0); /// Что здесь происходит ? Мы берем первый элемент из выборки объектов ????
и здесь
var c1=e1.className.match(/Namber\d+/)[0]; // Первый раз встречаюсь с таким className.match - что за зверь такой ? :blink:

ksa 18.10.2016 08:12

Цитата:

Сообщение от Black_Star
что происходит здесь -
var e1=o1.get(0); /// Что здесь происходит ?
Мы берем первый элемент из выборки объектов ?

Не просто первый, но еще и "превращенный" в элемент ДОМ
http://jquery-docs.ru/Core/get/#index
Цитата:

Сообщение от Black_Star
и здесь
var c1=e1.className.match(/Namber\d+/)[0]; // Первый раз встречаюсь с таким className.match
что за зверь такой ?

Т.о. я узнаю какой именно класс из Namber* есть у элемента
http://javascript.ru/string/match


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