Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Выделение элемента при наведении (https://javascript.ru/forum/events/17060-vydelenie-ehlementa-pri-navedenii.html)

setter 04.05.2011 16:24

Выделение элемента при наведении
 
Задача такая: нужно при наведении на любой элемент страницы выделить его, но, выделить именно 1 элемент.
Моя реализация чуть ниже. Проблема в том, что при наведении он выделяет и родителей элемента.:(
function MouseOver()
			{
				this.style.background="#FFFF00";
				this.style.color="#000";
				this.style.cursor="pointer";
				this.style.border="1px solid #FF0000";
			}
			
			function MouseOut()
			{
				this.style.background="";
				this.style.color="";
				this.style.border="";
			}
			
			function start() {
				var elements = document.getElementsByTagName("*");
				for(i=0; i<elements.length; i++)
				{
					if(elements[i].tagName!="BODY" && elements[i].tagName!="HTML")
					{
						elements[i].onmouseover = MouseOver;
						elements[i].onmouseout = MouseOut;
					}
				}
			}

			window.onload = start;

walik 04.05.2011 16:37

<html>
<head>
<script type="text/javascript" language="javascript">
function over(e) {
	var e = e || window.event;
	var elem = e.srcElement || e.target;
	var relatedTarget = e.relatedTarget || e.fromElement
	relatedTarget.style.background="";
    relatedTarget.style.color="";
    relatedTarget.style.border="";
	
	if (elem.tagName == 'BODY')
		return;
	elem.style.background="#FFFF00";
    elem.style.color="#000";
    elem.style.cursor="pointer";
    elem.style.border="1px solid #FF0000";
}
</script>
</head>
<body onmouseover="over(event);">
<div>
	<img src="http://javascript.ru/forum/images/smilies/smile.gif" /><br />
	<span>text text text text</span><br />
	<div>other text other text other text</div>
</div>
<img src="http://javascript.ru/forum/images/smilies/tongue.gif" />
<span>bla bla bla bla</span>
</body>
</html>

setter 04.05.2011 16:51

спасибо, а как можно использовать без "<body onmouseover", а прямо в js? и исключить тег body из выделения

walik 04.05.2011 16:54

window.onload = function() {
	document.body.onmouseover = over;
}


elem.tagName - имя тега текущего элемента

setter 04.05.2011 17:12

спасибо большое.
последний вопрос. не знаете случайно, как найти позицию (номер символа) того самого элемента в исходном коде по клику?

walik 04.05.2011 17:15

1. Что значит
Цитата:

Сообщение от setter
позицию (номер символа)

?

2. По клику - это уже другое событие, тут уже надо еще и onclick вешать на документ.

subzey 04.05.2011 17:48

walik,
e.fromElement и e.relatedTarget могут быть null, например, если курсор наведен из-за пределов окна. А это грозит ошибкой "не могу присвоить свойство null/undefined".
Если же курсор уводится за окно, событие mouseover, емнимс, не вызовется.

walik 04.05.2011 17:56

1.
Цитата:

Сообщение от subzey
e.fromElement и e.relatedTarget могут быть null, например, если курсор наведен из-за пределов окна.

Об этом не подумал))

2.
Цитата:

Сообщение от subzey
Если же курсор уводится за окно, событие mouseover, емнимс, не вызовется.

Для этого уже можно разбить на 2 функции (mouseover и mouseout)
Если сделать так, то первая проблема сразу решается.


В любом случае не собирался писать идеальный код, просто хотел показать более компактный (и по моему более правильный) вариант чем предложенный setter
:thanks: :)

setter 04.05.2011 19:06

Цитата:

Сообщение от walik (Сообщение 103294)
1. Что значит

?

ну например есть следующий код
<html>
	<body>
		<h1>text</h1>
	</body>
</html>

и при нажатии на text нужно узнать его позицию (в коде)
например в этом коде позиция будет 22
думаю конечно что это не реально, но все же может есть какой-либо способ?

walik 04.05.2011 19:09

Что то я не вникаю))) откуда взята цифра (позиция) 22 ?
Если взять с корня то он идет 3-й по счету: html -> body -> h1


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