Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как работает этот скрипт.. (https://javascript.ru/forum/misc/38904-kak-rabotaet-ehtot-skript.html)

Николай II 07.06.2013 10:50

Как работает этот скрипт..
 
Нашел здесь на форуме такой маленький скрипт:
var a =  document.getElementById("menu");
var b =  a.getElementsByTagName("a");
var THref = location.href;
leng = b.length
for(var i=0; i<leng; i++){
	if(b[i].href==THref){b[i].className='activ';}
}

Вроде бы все понятно, кроме одного момента. К примеру в переменную THref помещается адрес страницы "http://site.ru/page.html", а в переменную b ссылка из меню, имеющая вид "page.html"
Получается, что бы в условии получилось true достаточно частичного совпадения по "page.html"? Ведь по идее b[i].href==THref не должны быть равны, хотя бы по количеству символов.
В общем, каким образом происходит сравнение?

Спасибо за внимание.

ksa 07.06.2013 10:58

Цитата:

Сообщение от Николай II
а в переменную b ссылка из меню

В переменной b не ссылка. Там все теги A...

Цитата:

Сообщение от Николай II
имеющая вид "page.html"

Это кто такое сказал? :blink:
В b[i].href может быть любой URL... Как и в location.href.

Цитата:

Сообщение от Николай II
В общем, каким образом происходит сравнение?

Если URLы равны - условие выполнится.

Николай II 07.06.2013 11:54

Цитата:

Это кто такое сказал?
К примеру меню имеет такой вид <li><a href="page.html"></a></li>
То есть сравниваться будет "page.html" и "http://site.ru/page.html". Как они могут быть равны?

Цитата:

В b[i].href может быть любой URL... Как и в location.href.
Я понимаю, просто хотел на конкретном примере сравнить.

p.s. Если что, я не страдаю ерундой, просто мне важно понять логику работы скрипта.

Hekumok 07.06.2013 12:00

Николай II, а кто говорил, что они равны? :blink:

Николай II 07.06.2013 12:06

Цитата:

Николай II, а кто говорил, что они равны?
Но ведь этот скрип у меня на сайте выполняется...
То есть меню имеет такой вид как я указал выше и если зайти на страницу, адрес("http://site.ru/page.html) которой совпадает с ссылкой(page.html) в меню, то она(ссылка) меняет свой стиль. Значит они равны?

Hekumok 07.06.2013 12:23

нет, "page.html" != "http://site.ru/page.html"! Но кто сказал, что в href ссылки хранится именно page.html?
<a href="page.html">Page</a>
<script>
alert(document.querySelector("a").href) ;
</script>

Николай II 07.06.2013 12:43

Цитата:

Но кто сказал, что в href ссылки хранится именно page.html?
Но ведь пункты меню имеют вид <li><a href="page.html"></a></li>, без http и site.ru
Или при сравнении к ссылке автоматически добавляется домен и протокол?

ksa 07.06.2013 13:16

Цитата:

Сообщение от Николай II
мне важно понять логику работы скрипта

Таки смотри...

var a =  document.getElementById("menu");
var b =  a.getElementsByTagName("a");
var THref = location.href;
leng = b.length
for(var i=0; i<leng; i++){
	alert(b[i].href+' и '+THref);
	if(b[i].href==THref){b[i].className='activ';}
}

Николай II 07.06.2013 13:42

Все, понял. Просто я думал, что как прописана ссылка в меню, так скрипт буквально ее и сравнивает.

Благодарю.

danik.js 07.06.2013 15:28

Банальное непонимание что атрибут и свойство - не одно и то же.

var a = document.createElement('a');
a.href = 'page.html';

alert(a.href);
alert(a.getAttribute('href'));


другой пример

var a = document.createElement('a');
a.onclick = function() { alert('свойство') };

alert(a.onclick);
alert(a.getAttribute('onclick'));


Атрибуты используются как правило для задания начального значения в HTML-коде. Атрибуты могут хранить только строковые значения.

Свойства же часто отражают значения атрибутов, но разные свойства работают по-разному.


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