Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.01.2015, 10:55
Новичок на форуме
Отправить личное сообщение для uroboros7 Посмотреть профиль Найти все сообщения от uroboros7
 
Регистрация: 02.02.2012
Сообщений: 3

помогите разобраться с 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);
	});
});


Заранее спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 01.01.2015, 13:55
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

var self = this;
id_selected = $.grep(id_selected, function(val) {
return val != $(self).attr('id');
});
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 01.01.2015, 14:10
Новичок на форуме
Отправить личное сообщение для uroboros7 Посмотреть профиль Найти все сообщения от uroboros7
 
Регистрация: 02.02.2012
Сообщений: 3

Сообщение от devote Посмотреть сообщение
var self = this;
id_selected = $.grep(id_selected, function(val) {
return val != $(self).attr('id');
});
спасибище!!! заработало!!! а почему напрямую через this не хотело?
Ответить с цитированием
  #4 (permalink)  
Старый 01.01.2015, 14:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 27,278

uroboros7,
вариант ...
<!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>
Ответить с цитированием
  #5 (permalink)  
Старый 02.01.2015, 00:56
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,745

Сообщение от 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>

Последний раз редактировалось bes, 02.01.2015 в 10:46.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с калькулятором Maksim858 Ваши сайты и скрипты 1 27.12.2014 13:23
Получение ответа сервера через iframe и xhr. Помогите разобраться. Arconas AJAX и COMET 0 26.02.2013 09:38
Прелоадер (помогите разобраться) xsfd AJAX и COMET 6 16.09.2010 02:30
Помогите пожалуйста разобраться Kupu4 Ваши сайты и скрипты 0 21.01.2010 10:44
Помогите разобраться с галереей IMAGIN yana_studio Общие вопросы Javascript 4 12.12.2009 17:24