Спасибо
|
Блондинка,
Цитата:
Конечная страница имеет 4-й уровень вложенности, поэтому класс ссылкам с href="/menu/css/css3/transform.html" присвоен xyz4, ссылок /menu/css/css3.html /menu/css.html /menu.html у вас в коде нет, поэтому и классы xyz[1-3] проставлять нечему. Можете откорректировать наименования классов изменив локальную функцию "getClassName" в коде. |
https://jsfiddle.net/k3xz05sf/1/
<style>
body { font: 14px normal Times, serif; }
div { border: 1px solid #ccc; padding: 5px; margin: 5px; }
a { text-decoration: none; color: #3c3vff; }
.xyz1 { color: #0F0; }
.xyz2 { color: #FF0; }
.xyz3 { color: #F00; }
</style>
<div class="menu" id="menu1">
<a href="/html.html">HTML</a>
<a href="/css.html">CSS</a>
<a href="/js.html">JS</a>
</div>
<div class="menu" id="menu2">
<a href="/css/css3.html">CSS3</a><br/>
<div>
<a href="/menu/css/css3/transform.html">transform</a><br/>
<a href="/menu/css/css3/transform-origin.html">transform-origin</a><br/>
<a href="/menu/css/css3/transform-style.html">transform-style</a><br/>
</div>
</div>
<script>
(()=>{
//const uriWithoutParams=location.pathname.split(/[#|?]+/i).shift();
const uriWithoutParams='/menu/css/css3/transform.html'.split(/[#|?]+/i).shift();
const extension=uriWithoutParams.split('.').pop();
let uriParts=uriWithoutParams.replace('.'+extension,'').split('/').filter(part=>part.length);
const getClassName=index=>'xyz'+index;
const maxPostfix=3;
uriParts.forEach((uri,index)=>{
uri=`/${uriParts.slice(0,++index).join('/')}.${extension}`;
index=maxPostfix-(uriParts.length-index);
if(index<=0)
return;
const className=getClassName(index);
document.querySelectorAll(`a[href="${uri}"]`).forEach(node=>{
node.classList.add(className);
if(index!==maxPostfix)
return;
node.textContent='someText';
});
});
})();
</script>
|
Добавила классы .xyz4 .xyz5 .xyz6 .xyz7 добавила ссылки
|
одного не могу понять, почему я ничего не вижу нажав на кнопку посмотреть в этом сообщении, вернее ссылки как были синие...
Цитата:
|
Блондинка,
Цитата:
Ссылки "CCS3" и "CSS" остались синими, поскольку они не имеют отношения к текущему пути, т.к. у них в адресе нет директории "menu". |
Во блин, с каждым разом все больше загадок, почему то ссылка "transform" осталась синей? что такое "someText" и зачем оно нужно? вопрос в названии я написала "и одну ссылку заменить на текст?" а не "изменить текст ссылки"
|
вот почти работающий скрипт
(function() {
for(var index = 0, length = document.links.length, link; index < length; index++) {
link = document.links[index];
if(link.href === location.href) {
var p = document.createElement("span");
p.className = "xyz1";
p.innerHTML = link.innerHTML;
link.parentNode.replaceChild(p, link);
}
}
})();
на он работает только если прописать адрес без слеша, а если прописать адрес со слешем /transform.html или так /css/css3/transform.html то не работает, и не меняет цвет у других ссылок имеющие отношения к текущему пути, и для наилучшего варианта надо в скрипте указать количество директорий перечислив необходимые "xyz1", "xyz2", "xyz3", "xyz4", "xyz5", "xyz6", xyz7", xyz8" и дальше чтобы можно было в скрипте изменить названия классов потом в стиле прописать эти классы чтобы было интуитивно понятно чему соответствует каждый класс, и выбросить и скрипт и стиль в отдельные файлы |
Цитата:
Цитата:
Попробуйте так:
(function() {
const uriWithoutParams=location.pathname.split(/[#|?]+/i).shift();
//var uriWithoutParams = '/menu/css/css3/transform.html'.split(/[#|?]+/i).shift();
var extension = uriWithoutParams.split('.').pop();
var uriParts = uriWithoutParams.replace('.' + extension, '').split('/').filter(function(part) {
return part.length;
});
var getClassName = function(index) {
return 'xyz' + index;
};
var maxPostfix = 3;
uriParts.forEach(function(uri, index) {
uri = '/' + uriParts.slice(0, ++index).join('/') + '.' + extension;
index = maxPostfix - (uriParts.length - index);
if (index <= 0)
return;
var className = getClassName(index);
[].forEach.call(document.querySelectorAll('a[href="' + uri + '"]'), function(node) {
node.classList.add(className);
if (index !== maxPostfix)
return;
var textNode = document.createElement('span');
textNode.textContent = 'someText';
textNode.className = className;
node.parentNode.insertBefore(textNode, node);
node.parentNode.removeChild(node);
}));
});
})();
|
11 строчка var maxPostfix = 3; это степень вложенности? и надо обернуть в конструкцию DOMContentLoaded?
|
| Часовой пояс GMT +3, время: 21:06. |