Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.02.2010, 20:22
Аватар для why.not?
Аспирант
Отправить личное сообщение для why.not? Посмотреть профиль Найти все сообщения от why.not?
 
Регистрация: 28.02.2010
Сообщений: 74

Присвоение класса элементу с заранее неизвестным 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-файл, чтобы его прикрутили к сайту.
Заранее спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 28.02.2010, 20:28
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Извлекайте из строки window.location.href нужный идентификатор и добавляйте CSS-класс соответствующему элементу:
document.getElementById("id").className += " someclass";
Ответить с цитированием
  #3 (permalink)  
Старый 28.02.2010, 20:59
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

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

if (id && id[1]) {
    var element = document.getElementById(id[1]);
    if (element) {
        element.className += " someclass";
    }
}
Ответить с цитированием
  #4 (permalink)  
Старый 01.03.2010, 04:47
Аватар для why.not?
Аспирант
Отправить личное сообщение для why.not? Посмотреть профиль Найти все сообщения от why.not?
 
Регистрация: 28.02.2010
Сообщений: 74

Замечу, что проблему я все же решил, пусть и не столь изящным способом:
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";
		};
};

Вдруг, кому-то пригодится?
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск