Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   помогите добавить class/id элементу (https://javascript.ru/forum/events/23067-pomogite-dobavit-class-id-ehlementu.html)

magnateg 10.11.2011 15:36

помогите добавить class/id элементу
 
Здравствуйте всем!
Есть готовая фотогалерея, в которой не реализовано выделение активной картинки (т.е. нажимаем на картинку и у нее присваивается border 1px white к примеру). Есть задача сделать это выделение.
Сам я в JS не разбираюсь, прошу помощи у вас:
Как добавить класс active при нажатии на картинку?
код события которое происходит при onclick:
//dom
function vsig_dom(obj) {return document.getElementById(obj); }

//switch image without reload
function switchimg(t_ident, t_ident_b) {
	//topimage
	var topimg = "topimg" + t_ident_b[2];
	t_ident[6] = t_ident[6].replace(/'/g, "'"); //replace ' with ' in alt-title
	t_ident[4] = t_ident[4].replace(/'/g, "'"); //replace ' with ' in link-title
	t_ident[6] = t_ident[6].replace(/&/g, "&"); //replace & with & in alt-title
	//switch caption
	var t_cap = (typeof (vsig_dom(topimg).parentNode.href) !== "undefined") ? (vsig_dom(topimg).parentNode.parentNode.getElementsByTagName("div")) : (vsig_dom(topimg).parentNode.getElementsByTagName("div"));
	if (t_cap.length >= 1) {
		t_cap[0].innerHTML = (t_ident[1] !== "" || t_ident[2] !== "") ? ("<span>" + t_ident[1] + "</span><span>" + t_ident[2] + "</span>") : "";
	}
	//switch link
	if (typeof (vsig_dom(topimg).parentNode.href) !== "undefined") {
		vsig_dom(topimg).parentNode.href = t_ident[3];
		vsig_dom(topimg).parentNode.title = t_ident[4];
		vsig_dom(topimg).parentNode.target = t_ident[5];
	}
	//switch image
	vsig_dom(topimg).src = t_ident_b[0] + "vsig_images/" + t_ident[0];
	vsig_dom(topimg).alt = t_ident[6];
	vsig_dom(topimg).title = t_ident[6];
	vsig_dom(t_ident).id='active';
	
}

Рабочая галерея тут

ksa 10.11.2011 15:55

Цитата:

Сообщение от magnateg
Сам я в JS не разбираюсь, прошу помощи у вас

А в чём разбираешься? А то может бартер! :D

Pavel M. 10.11.2011 16:01

по моему здесь JS не нужен
можно CSS обойтись
добавить

.vsig_thumb a:active img { border: 1px solid white; }


можно почитать http://htmlbook.ru/css/active

magnateg 10.11.2011 16:03

Цитата:

Сообщение от ksa (Сообщение 135670)
А в чём разбираешься? А то может бартер! :D

ни в че особо хорошо =(, в linux могу чемто помочь)
ну еще в машинах разбираюсь :D

ksa 10.11.2011 16:05

Pavel M., так "нажал" и "навел" кагбе разные действия и последствия будут разные... После нажатия изменения остаются, а после "убирания наведения" всё возвращается на круги своя... :)

ksa 10.11.2011 16:06

Цитата:

Сообщение от magnateg
ну еще в машинах разбираюсь

Может тогда поможешь мотор с кузова Газели в гараж занести? :) А то наши тут вовсе заелись...

Pavel M. 10.11.2011 16:09

Цитата:

Сообщение от ksa (Сообщение 135676)
Pavel M., так "нажал" и "навел" кагбе разные действия и последствия будут разные... После нажатия изменения остаются, а после "убирания наведения" всё возвращается на круги своя... :)

:active как раз при нажатии, это :hover при наведении

magnateg 10.11.2011 16:09

Цитата:

Сообщение от ksa (Сообщение 135677)
Может тогда поможешь мотор с кузова Газели в гараж занести? :) А то наши тут вовсе заелись...

без б:D
только если Новосиб:)

magnateg 10.11.2011 16:13

Цитата:

Сообщение от Pavel M. (Сообщение 135674)
по моему здесь JS не нужен
можно CSS обойтись
добавить

.vsig_thumb a:active img { border: 1px solid white; }


можно почитать http://htmlbook.ru/css/active

не работает(

Pavel M. 10.11.2011 16:16

Цитата:

Сообщение от magnateg (Сообщение 135681)
не работает(

а куда добавил то ?

magnateg 10.11.2011 16:18

Цитата:

Сообщение от Pavel M. (Сообщение 135682)
а куда добавил то ?

в style.css и пробовал в vsig.css

Pavel M. 10.11.2011 16:18

у тебя в css
.vsig_thumb img {
...
border: medium none !important;
...
}

значит тогда или убери !important или добавь !important в правило с :active

magnateg 10.11.2011 16:20

Цитата:

Сообщение от magnateg (Сообщение 135684)
в style.css и пробовал в vsig.css

убрал св-во border:none у img. заработало
но работает и правда только при наведении
мышь убираешь убирается border

Pavel M. 10.11.2011 16:30

тогда javascript нужен - класс у выбранного элемента установить
и на него повесить стили
это надо 'мотор с кузова Газели в гараж занести'
без этого никак.

magnateg 10.11.2011 16:34

Цитата:

Сообщение от Pavel M. (Сообщение 135689)
тогда javascript нужен - класс у выбранного элемента установить
и на него повесить стили
это надо 'мотор с кузова Газели в гараж занести'
без этого никак.

че все так сложно?
я думал тут всего 1 строчку дописать...

ksa 10.11.2011 16:43

Цитата:

Сообщение от Pavel M.
:active как раз при нажатии, это :hover при наведении

Упс. Извини... :)

ksa 10.11.2011 16:44

Цитата:

Сообщение от magnateg
только если Новосиб

Я рядом с Волгоградом... :)

ksa 10.11.2011 16:47

Pavel M., и вот такое ты таки советовал? :D

<style type="text/css">
p:active {
	color: red;
}
</style>
<p>Бивас, тест!</p>

Ты хоть сам-то тесть, что другим предлогаешь... ;)

ksa 10.11.2011 16:49

Цитата:

Сообщение от magnateg
че все так сложно?

Придётся тебе к 12-ти завтра в ГСК со мной и в рабочей форме! :D

Pavel M. 10.11.2011 17:10

Цитата:

Сообщение от ksa (Сообщение 135698)
Pavel M., и вот такое ты таки советовал? :D

советовал :)

в первом сообщении темы было
> т.е. нажимаем на картинку и у нее присваивается border 1px white

тут сss бы справился

а теперь все так сложно, что только ты ему поможешь

ksa 10.11.2011 21:19

Цитата:

Сообщение от Pavel M.
а теперь все так сложно, что только ты ему поможешь

А мотор мне кто будет разгружать? :D

trikadin 10.11.2011 21:47

Грузчики, ksa. :lol:

Gozar 10.11.2011 22:47

измени:
//switch image without reload
function switchimg(t_ident, t_ident_b) {


на:
//switch image without reload
function switchimg(t_ident, t_ident_b, a) {
a.style.border = "1px solid #FF0000";


а вызов в <а>:

onclick="switchimg(vsig_4_0[7],vsig_4_0_b, this);return false;"


должно заработать.

magnateg 11.11.2011 07:18

Цитата:

Сообщение от Gozar (Сообщение 135817)
измени:
//switch image without reload
function switchimg(t_ident, t_ident_b) {


на:
//switch image without reload
function switchimg(t_ident, t_ident_b, a) {
a.style.border = "1px solid #FF0000";


а вызов в <а>:

onclick="switchimg(vsig_4_0[7],vsig_4_0_b, this);return false;"


должно заработать.

Спасибо огромное!
a.firstChild.style.border = "1px solid #FF0000";
отлично работает!

magnateg 11.11.2011 08:31

Еще осталась проблемка - как сделать чтобы при клике на следующую уменьшенную картинку border у предыдущей очищался?
Сделал так (ниже), но не работает, подскажите что не так?
у меня есть предположения что переменную prev_thumb надо гдето в другом месте сохранять
var prev_thumb= "";
	a.firstChild.active_thumb = 0;
	
	if (a.firstChild.active_thumb == 0) {
	prev_thumb.firstChild.style.border = "";
	prev_thumb.firstChild.active_thumb = 0;
	a.firstChild.style.border = "2px solid #FFFFFF";
	a.firstChild.active_thumb = 1;
	
	prev_thumb = a;
	}

ksa 11.11.2011 08:50

magnateg, начинай уже делать полные тестовые примеры... Это увеличит твои шансы на помощь. ;)

magnateg 11.11.2011 09:01

Цитата:

Сообщение от ksa (Сообщение 135865)
magnateg, начинай уже делать полные тестовые примеры... Это увеличит твои шансы на помощь. ;)

что за полные тестовые примеры?
могу дать ссылку на работающий пример, это вы имели ввиду?

ksa 11.11.2011 10:29

Цитата:

Сообщение от magnateg
что за полные тестовые примеры?

На этом форуме валом таких примеров... Это минимальная хтмл-страница на которой проявляется проблема. Подъредактировав которую, можно показать автору варианты решения...

Вот например
http://javascript.ru/forum/jquery/23...tml#post135349

magnateg 14.11.2011 15:01

Решил проблему:
function switchimg(t_ident, t_ident_b, abc) {
	
	if (abc != "1")
	{ 
	if (vsig_dom('active_thumb')) {
	vsig_dom('active_thumb').id = ""
	}
	abc.firstChild.id ="active_thumb";
	}
	
	//topimage	
	var topimg = "topimg" + t_ident_b[2];
	t_ident[6] = t_ident[6].replace(/&#39;/g, "'"); //replace &#39; with ' in alt-title
	t_ident[4] = t_ident[4].replace(/&#39;/g, "'"); //replace &#39; with ' in link-title
	t_ident[6] = t_ident[6].replace(/&amp;/g, "&"); //replace &amp;amp; with &amp; in alt-title
	//switch caption
	var t_cap = (typeof (vsig_dom(topimg).parentNode.href) !== "undefined") ? (vsig_dom(topimg).parentNode.parentNode.getElementsByTagName("div")) : (vsig_dom(topimg).parentNode.getElementsByTagName("div"));
	if (t_cap.length >= 1) {
		t_cap[0].innerHTML = (t_ident[1] !== "" || t_ident[2] !== "") ? ("<span>" + t_ident[1] + "</span><span>" + t_ident[2] + "</span>") : "";
	}
	//switch link
	if (typeof (vsig_dom(topimg).parentNode.href) !== "undefined") {
		vsig_dom(topimg).parentNode.href = t_ident[3];
		vsig_dom(topimg).parentNode.title = t_ident[4];
		vsig_dom(topimg).parentNode.target = t_ident[5];
	}
	//switch image
	vsig_dom(topimg).src = t_ident_b[0] + "vsig_images/" + t_ident[0];
	vsig_dom(topimg).alt = t_ident[6];
	vsig_dom(topimg).title = t_ident[6];
	
}

Андрей38 15.11.2011 03:38

Цитата:

Сообщение от magnateg (Сообщение 135864)
Еще осталась проблемка - как сделать чтобы при клике на следующую уменьшенную картинку border у предыдущей очищался?
Сделал так (ниже), но не работает, подскажите что не так?
у меня есть предположения что переменную prev_thumb надо гдето в другом месте сохранять
var prev_thumb= "";
	a.firstChild.active_thumb = 0;
	
	if (a.firstChild.active_thumb == 0) {
	prev_thumb.firstChild.style.border = "";
	prev_thumb.firstChild.active_thumb = 0;
	a.firstChild.style.border = "2px solid #FFFFFF";
	a.firstChild.active_thumb = 1;
	
	prev_thumb = a;
	}

В квери
$(this).prev().css({'border':0})

Андрей38 15.11.2011 03:42

Подскажите пожайлуста.
Есть ли в файле стилей что-то наподобии
$([id^*$='F']) ?
Обойтись без addClass хотелось бы $([id^='F']) .addClass('F') ,
...стиль уже привязанн к АйДи F, а этот АйДи ичнутый на + еденицу( i=o..... i++) и таким образом их уже несколько , но зато с единым корнем F. А поэтому ,
стиль #F{border:3;color:FFF }
#F-1...#F-15 :) уже не ловит
...Не писать же #F-1б,#F-2...,#F-15 {border:3;color:FFF } :)

ksa 15.11.2011 11:56

Цитата:

Сообщение от Андрей38
Есть ли в файле стилей что-то наподобии
$([id^*$='F']) ?

Как вариант...

<style type="text/css">
p[id^='item_'] {
	color: red;
}
</style>
<p id='item_1'>Item 1</p>
<p id='item_2'>Item 1</p>
<p id='item_3'>Item 1</p>

Андрей38 15.11.2011 23:37

Цитата:

Сообщение от ksa (Сообщение 136591)
Как вариант...

<style type="text/css">
p[id^='item_'] {
	color: red;
}
</style>
<p id='item_1'>Item 1</p>
<p id='item_2'>Item 1</p>
<p id='item_3'>Item 1</p>

Wow! KSA ! Ну Вы даете! ОГромнейшее спасибо ! Не ожидал !!!
Работает !!! Я вижу ,что Вы и по Квери спец как в чистом ДжЭс.
Откуда такие глубочайшие знания , Гуру КСА?

ksa 16.11.2011 08:32

Цитата:

Сообщение от Андрей38
Откуда такие глубочайшие знания , Гуру КСА?

Я еще и на машинке могу... :lol: (с)

А конкретно эти сведения можно почерпнуть в любой документации по селекторам атрибутов... Например тут
http://www.xiper.net/learn/css/selec...selectors.html

Почитай, не поленись... ;)

Андрей38 16.11.2011 23:12

$(this).css({'border':200px}).siblings.css({'border':0px})

Есть еще 1 часто используемый вариант
$(this).css({'border':200px})
(в Паренте )$('img').css({'border':0px})
Чтоб добиться результата во втором случае-нужно поменять местами пока не заработает

Андрей38 16.11.2011 23:21

Цитата:

Сообщение от ksa (Сообщение 136843)
Я еще и на машинке могу... :lol: (с)

А конкретно эти сведения можно почерпнуть в любой документации по селекторам атрибутов... Например тут
http://www.xiper.net/learn/css/selec...selectors.html

Почитай, не поленись... ;)

Спасибо,КСА.Думал до этого времени,что это заточенно под Квери только
.
Подскажите пожайлуста, как выудить сумму из такого случая,а то застрял
<div id='Nav_1'>xxxx</div>
var d= $(this).parent().parent().attr('id').split('Nav_')[1]+143
alert(d)
Проблему я ,вообще-то уже решил,но лишь изначально изменив отсчет ич-айди с и=0 на и=-1.Но все равно БЫЛ БЫ ОЧЕНЬ ПРИЗНАТЕЛЕН ЗА РЕШЕНИЕ
alert(d)

ksa 17.11.2011 09:09

Цитата:

Сообщение от Андрей38
как выудить сумму из такого случая,а то застрял
<div id='Nav_1'>xxxx</div>

Например так...

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
$(document).ready(function(){
	$('[id^="Nav_"]').each(function(){
		alert($(this).text())
	});
});
</script>
</head>
<body>
<div id='Nav_1'>xxxx</div>
<div id='Nav_2'>yyyy</div>
<div id='Nav_3'>zzz</div>
</body>
</html>

Андрей38 17.11.2011 21:18

Та не...
Я имел ввиду
var f= [1]
var h=[34]
alert(f+h)
...Или страницу, где почитать

ksa 18.11.2011 08:30

Андрей38, начинай таки делать сам тестовые примеры... ;)

Андрей38 19.11.2011 23:41

Цитата:

Сообщение от ksa (Сообщение 137321)
Андрей38, начинай таки делать сам тестовые примеры... ;)

Вас понял.Спасибо,Гуру


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