Вход

Просмотр полной версии : как сохранить ссылку на тэг по которому кликнул ?


mitiya
16.04.2015, 18:40
Здравствуйте.

есть множество div без класса или id. при клике по одному из них можно поместить x = $(this) в переменную. И позже сделать $(x) и сделать что-то с тем дивом. Но мне надо сохранить х в localstorage.
х где-то внутри себя ссылается на самого себя, из-за этого его нельзя конвертнуть в JSON. Хотелось бы узнать как из $(this) достать ссылку на именно это див, что не хранить весь объект.

рони
16.04.2015, 19:09
mitiya,
храните индекс нажатого элемента
var divs = $('div');
var x = divs.index(this);
var elem = $('div').eq(x);

mitiya
16.04.2015, 20:05
а получить конкретный путь к элементу можно?
что бы использовать индекс надо получить еще и корневой элемент, при сложной структуре это трудно.

рони
16.04.2015, 20:09
что бы использовать индекс надо получить еще и корневой элемент
где в коде вы увидели корневой элемент?
а получить конкретный путь к элементу можно? а чем путь через индекс не нравится?

mitiya
16.04.2015, 20:18
если у меня див в диве то как я его найду?

рони
16.04.2015, 20:22
mitiya,
я показал как -- попробуйте это применить - сделайте макет с минимальным html - 10 строк кода и будет чудесное исцеление

рони
16.04.2015, 21:21
mitiya,
посмотрите 2 раза, кликать по цифрам
<!DOCTYPE HTML>

<html>

<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
div.active::after {
content: "(ты тыкал меня уже)";
padding: 0 0 0 5px;
}

</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
$(function(){
var items = JSON.parse(window.localStorage.getItem('x') || "{}");
var divs = $('div');
for(var key in items) {
if (items.hasOwnProperty(key)) {
$('div').eq(key).addClass('active');
}
}
window.localStorage.setItem('x', JSON.stringify(items));
divs.click(function(event) {
event.stopPropagation();
var i = divs.index(this);
items[i] = 1;
window.localStorage.setItem('x', JSON.stringify(items));
$('div').eq(i).addClass('active');
})
});


</script>
</head>

<body>
<div >
<div >1</div>
<div >2</div>
<div >3</div>
<div >4</div>
<div >5</div>
<div >6</div>
<div >7</div>
</div>
<div >8</div>
<div >9</div>
<div >10</div>
<div >11</div>
<div >12</div>
<div >
<div >13</div>
<div >14</div>
<div >15</div>
<div >16</div>
</div>



</body>

</html>

mitiya
16.04.2015, 22:14
я понял как это работает и оно работает в случае "макет с минимальным html - 10 строк кода",но вот у этих дивов около 700 вперемешку с img и h и тд. и вот это код не работает

$('html, body').animate({
scrollTop: $("div",$('#text')).eq(br.storage.get('pos')).offset().to p
}, 200);

точнее он работает, но скролит не к тому элементу, и чем индекс больше тем больше смещение.

Vlasenko Fedor
16.04.2015, 22:43
mitiya,
прокрутка для чего может так
http://jsfiddle.net/vlasenkofedor/2St2g/
а так ссылку на которую кликнули можно где угодно сохранить и даже в элемент который кликнули

рони
16.04.2015, 22:58
mitiya,
да хоть 1000 элементов если это одна и таже страница -- покажите код

mitiya
16.04.2015, 23:28
вот (https://jsfiddle.net/mitiya/g57bewwz/1/) только сразу предупреждаю, там трафика мегабайта на 3.
Когда загрузится, ткните по абзацу до которого доскролилось и увидите что индекс у него 126, а скролил я до 101. Это к примеру.

рони
16.04.2015, 23:48
mitiya,
:-? берёте индекс в одном месте, а ищите в другом?
var txt = $('#text'), divs = $("div", txt);
divs.click(function(){
$(this).css('background', 'red');
var x = divs.index(this);
alert(x);
});

$('html, body').animate({
scrollTop: divs.eq(101).offset().top
}, 200);

mitiya
17.04.2015, 00:03
О спасибо.
Запутался с index()