Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Оптимизация скрипта (https://javascript.ru/forum/misc/42299-optimizaciya-skripta.html)

Николай II 21.10.2013 13:03

Оптимизация скрипта
 
Все привет!

На сайте есть два меню слева и справа с разными id, для них нужно было написать скрипт, который проверяет url страницы и сравнивает его с url в пунктах меню, чтобы затем присвоить при совпадении нужному пункту определенный стиль css.
Вот он:
window.onload = function () {
	activProduct();
	activService();
}

var activProduct = function () {
	var menuProduct =  document.getElementById("menu_product");
	var a =  menuProduct.getElementsByTagName("a");
	var tHref = location.href;
	for(var i=0; i < a.length; i++) {
		if (a[i].href==tHref) {
			a[i].className='menu-link_activ';
		}
	}
}

 var activService = function () {
	var menuService =  document.getElementById("menu_service");
	var a =  menuService.getElementsByTagName("a");
	var tHref = location.href;
	for(var i=0; i < a.length; i++) {
		if (a[i].href==tHref) {
			a[i].className='menu-link_activ';
		}
	}
}


Скрипт работает, но я активно изучаю JS и стремлюсь к совершенству.

Вопрос, все ли здесь корректно и целесообразно, и можно ли каким-то образом сократить?

Гробовщик 21.10.2013 13:43

Можно... Вот так например.
window.onload = function () {
	activProduct();
	activService();
}

var activProduct = function () {
	var a =  document.getElementById("menu_product").getElementsByTagName("a");
	var tHref = location.href;
	for(var i=0; i < a.length; i++) {
		if (a[i].href==tHref) {
			a[i].className='menu-link_activ';
		}
	}
}

 var activService = function () {
	var a =  document.getElementById("menu_service").getElementsByTagName("a");
	var tHref = location.href;
	for(var i=0; i < a.length; i++) {
		if (a[i].href==tHref) {
			a[i].className='menu-link_activ';
		}
	}
}

Экономия 2 строки, несколько байт, и возможно какая-то (очень мелкая) единица времени. Каждый программирует по разному, а если код нормально работает то лучше его не трогать...

Николай II 21.10.2013 14:00

А если сделать функции именованными - лучше не станет?

ruslan_mart 21.10.2013 14:05

window.onload = function() {
	var a = document.querySelectorAll('#menu_product a, #menu_service a'), i;
	for(i=0; i<a.length; i++) if(a[i].href == location.href) a[i].className = 'menu-link_activ';
}

Николай II 21.10.2013 14:12

Погуглил сейчас про метод querySelectorAll, но так и не понял, это из jQuery или чистый JS? Если JS, то какими браузерами поддерживается?

ruslan_mart 21.10.2013 14:17

Николай II, чистый JS.

Цитата:

Сообщение от Николай II
какими браузерами поддерживается?

http://caniuse.com/queryselector

Николай II 21.10.2013 14:19

Большое спасибо!


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