#javascript #jquery #html #css
#javascript #jquery #HTML #css
Вопрос:
Я нахожусь в процессе создания веб-сайта, и я не могу понять, почему этот js-скрипт не применяет стиль css к li:
$(document).ready(function () {
var location = window.location;
var found = false;
$("#tab-container a").each(function(){
var href = $(this).attr("href");
if(href==location){
$(this).parent().addClass("selected");
found = true;
}
});
if(!found){
$("#tab-container li:first").addClass("selected");
}
});
мои li
s следующие:
<head>
<title>Title</title>
<link rel="stylesheet" type="text/css" href="basic2.css" />
<script type="text/javascript" src="script.js"></script>
</head>
<body background="background.jpg">
<div id='content'>
<div id='tab-container'>
<ul>
<li><a href='a.html'>a</a></li>
<li><a href='r.html'>b</a></li>
<li><a href='h.html'>c</a></li>
<li><a href='c.html'>d</a></li>
</ul>
</div>
<div id='main-container'>
<h1>content for page a</h1>
</div>
</div>
</body>
Часть .selected:
#tab-container ul li.selected {
border-right: none;
background-color: rgba(255,255,255,0.8);
border-left: 8px solid #006699;
}
Я не знаю js, но я так долго смотрел на код js, что, думаю, я его понимаю.
Часть js взята из: http://bobcravens.com/demos/vertical_tabs/html.html
Комментарии:
1. Вы проверили
selected
, был ли добавлен класс? Скорее всего, href не соответствует вашему местоположению var2.
$(this).attr('href')
возвращает буквальное содержимоеhref
атрибута (как было быthis.getAttribute('href')
); не абсолютный URL-адрес, который содержался бы вhref
свойстве ($(this).prop('href')
или, лучше ,this.href
). И adocument.location
никогда не будет равен относительному URL (например, всем тем, которые вы используете вa
элементах).3. Да, вам понадобится подстрока вашего местоположения и протестируйте ее.
4. Какие-либо ошибки в вашей консоли JavaScript (‘F12’ в большинстве браузеров)?
5. Тогда вы (по-видимому) не включили библиотеку jQuery. Вам нужно будет включить это.
Ответ №1:
Я бы предложил упростить ваш jQuery и использовать (хотя и непроверенный):
$(document).ready(function () {
// getting a reference to the URL of the current page:
var location = window.location;
// selecting all 'a' elements within the '#tab-container' element:
$('#tab-container a')
// filtering that collection of 'a' elements, keeping only the element(s)
// whose 'href' property is equal to the URL of the current page:
.filter(function(index, DOMNode){
// index: the index of the node over which we're iterating amongst the
// collection returned by jQuery,
// DOMNode: the node itself (could also use, simply, 'this' or '$(this)'):
return DOMNode.href === location;
})
// moving to the parent element of the retained li elements (if any):
.parent()
// adding the 'selected' class:
.addClass('selected');
});
Ссылки:
addClass()
.filter()
.parent()
.
Ответ №2:
Попробуйте это:
var locationArr = window.location.split("/");
var location = locationArr[locationArr.length - 1];
Комментарии:
1. Спасибо, я это понимаю, но это все равно не работает
2. Можете ли вы сказать мне, к чему это приводит, когда вы сообщаете о «местоположении» после приведенной выше строки?
Ответ №3:
Похоже, все работает нормально.
$(document).ready(function () {
var location = window.location;
var found = false;
$("#tab-container a").each(function(){
var href = $(this).attr("href");
if(href==location){
$(this).parent().addClass("selected");
found = true;
}
});
if(!found){
$("#tab-container li:first").addClass("selected");
}
})
На странице может возникнуть другая ошибка. Проверьте свою консоль.
Ответ №4:
window.location
предоставит вам полный путь к вашему URL-адресу; однако путь, который вы сравниваете с тегом привязки, не содержит домена. Вы можете добавить его или разделить URL-адрес на массив и сравнить после последней косой черты.
$(document).ready(function () {
var location = window.location;
var found = false;
var pArray = window.location.pathname.split( '/' );
$("#tab-container a").each(function(){
var href = $(this).attr("href");
if(href==pArray[1]){
$(this).parent().addClass("selected");
found = true;
}
});
if(!found){
$("#tab-container li:first").addClass("selected");
}
});