Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   помогите разобраться с this (https://javascript.ru/forum/jquery/52687-pomogite-razobratsya-s.html)

uroboros7 01.01.2015 09:55

помогите разобраться с this
 
добрый день, всех с новым годом, помогите разобраться с
this


собственно в чем вопрос, мне нужно чтобы при клике по элементу списка их id заносились в массив а при повторном клике из этого массива удалялись. С добавлением проблем не возникло а вот с удалением сложнее - элементы не удаляются. Догадываюсь что проблема именно с this, так как если поменять
return val != $(this).attr('id');
к примеру на
return val != '2';
все прекрасно работает (соответствующий id удаляется). Перепробывал разные варианты нифига не получается, помогите плиз.



$(document).ready(function(){
	var id_selected = [];
	
	//выделение
	$("ul#art_gen > li").bind("click", function(){
  		
		if ($(this).hasClass("article_selected")){
						
			id_selected = $.grep(id_selected, function(val) {
			return val != $(this).attr('id');
			});	
									
			$(this).removeClass();
				
			
		} else {
			$(this).addClass("article_selected")
			id_selected.push(this.id);
		}
		
		alert(id_selected);
	});
});


Заранее спасибо

devote 01.01.2015 12:55

var self = this;
id_selected = $.grep(id_selected, function(val) {
return val != $(self).attr('id');
});

uroboros7 01.01.2015 13:10

Цитата:

Сообщение от devote (Сообщение 349120)
var self = this;
id_selected = $.grep(id_selected, function(val) {
return val != $(self).attr('id');
});

спасибище!!! заработало!!! а почему напрямую через this не хотело?

рони 01.01.2015 13:43

uroboros7,
вариант ... :write:
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .article_selected {
    background: #FFCC00;
  }
  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
  $(function() {
    var $li = $("ul#art_gen > li"),
        id_selected = [];
    $li.on({
        click: function() {
            $(this).toggleClass("article_selected");
            id_selected = $.map($li.filter(".article_selected"), function(el) {
                return el.id
            });
            alert(id_selected)
        }
    })
});
  </script>
</head>

<body>
<ul id="art_gen">
    <li id="1">1</li>
    <li id="2">2</li>
    <li id="3">3</li>
    <li id="4">4</li>
    <li id="5">5</li>
</ul>

</body>

</html>

bes 01.01.2015 23:56

Цитата:

Сообщение от uroboros7
собственно в чем вопрос, мне нужно чтобы при клике по элементу списка их id заносились в массив а при повторном клике из этого массива удалялись.

<style>
.article_selected {
	background: #FFCC00;
}
</style>
<script>
document.addEventListener("DOMContentLoaded", function () {
	document.querySelector("ul#art_gen").addEventListener("click", function (event) {
		if (!this.mas) this.mas = [];
		var target = event.target;
		if (target.tagName == "LI") {
			var index = this.mas.indexOf(target.id);
			( index == -1 )? this.mas.push(target.id) : this.mas.splice(index, 1);
			target.classList.toggle("article_selected");
		}
		console.log(this.mas);
	});
});
</script>
<ul id="art_gen">
	<li id="1">1</li>
	<li id="2">2</li>
	<li id="3">3</li>
	<li id="4">4</li>
	<li id="5">5</li>
</ul>


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