Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Присвоение класса элементу с заранее неизвестным ID (https://javascript.ru/forum/events/7958-prisvoenie-klassa-ehlementu-s-zaranee-neizvestnym-id.html)

why.not? 28.02.2010 20:22

Присвоение класса элементу с заранее неизвестным ID
 
Здравствуйте.
Мне нужен совет, быть может некоторая помощь кодом, очень надеюсь ее получить здесь.
Итак, дано: я имею список на сайте неизвестной длины следующего вида:
<ul id="list">
	<li id="somename"><a href ="/somename/">somename</a><li>
	<li id="somename_1"><a href ="/somename_1/">somename_1</a><li>
	<li id="somename_2"><a href ="/somename_2/">somename_2</a><li>
	<li id="somename_3"><a href ="/somename_3/">somename_3</a><li>
	<li id="somename_4"><a href ="/somename_4/">somename_4</a><li>
	......
	<li id="somename_n"><a href ="/somename_n/">somename_n</a><li>
</ul>

Замечу, что ID элемента списка, href и текст ссылки генерируются на серверной стороне и совпадают друг с другом, но тройки значений могут быть любыми (<li id="korova"><a href="/korova/">korova</a><li>) etc.
Задача: написать js, который в зависимости от текущего URL добавляет класс "someclass" соответствующему элементу списка.
Пример: если document.URI==http://www.site.com/somename_3/ то элемент с id="somename_3" получает класс "someclass".
Обращу внимание, что с помощью GetElementByID и функцией classname я не могу уверенно оперировать, так как неизвестен ID последнего элемента.
Усложняет ситуацию то, что к серверной части я не имею доступа и могу только лишь отдать js-файл, чтобы его прикрутили к сайту.
Заранее спасибо

Octane 28.02.2010 20:28

Извлекайте из строки window.location.href нужный идентификатор и добавляйте CSS-класс соответствующему элементу:
document.getElementById("id").className += " someclass";

Octane 28.02.2010 20:59

var id = (/\/(somename_\d)(\/|$)/).exec(window.location.href);

if (id && id[1]) {
    var element = document.getElementById(id[1]);
    if (element) {
        element.className += " someclass";
    }
}

why.not? 01.03.2010 04:47

Замечу, что проблему я все же решил, пусть и не столь изящным способом:
function menu_active() {
var str=window.location.pathname //window.location.pathname проще парсить, на мой взгляд, чем window.location.href
var reg=/\//g //так как переменная принимает значение в виде /something/, то достаточно просто убрать слэши такой корявой регуляркой
var idl=str.replace(reg, "")
if(idl.length > 0) // если мы не на главной странице, то приписываем элементу списка активный класс .active
    {
		document.getElementById(idl).className += " active";
		}
else	{ //на главной странице window.location.pathname с отрезанными слэшами возвращает null, поэтому делаем активным первый элемент списка с известным заранее id
		document.getElementById("first").className += " active";
		};
};

Вдруг, кому-то пригодится?:)


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