Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   можно ли изменить цвет ссылок? и одну ссылку заменить на текст? (https://javascript.ru/forum/misc/76934-mozhno-li-izmenit-cvet-ssylok-i-odnu-ssylku-zamenit-na-tekst.html)

Блондинка 07.03.2019 13:34

Спасибо

Nexus 07.03.2019 13:40

Блондинка,
Цитата:

Сообщение от Блондинка

И что не так?
Конечная страница имеет 4-й уровень вложенности, поэтому класс ссылкам с href="/menu/css/css3/transform.html" присвоен xyz4, ссылок
/menu/css/css3.html
/menu/css.html
/menu.html
у вас в коде нет, поэтому и классы xyz[1-3] проставлять нечему.

Можете откорректировать наименования классов изменив локальную функцию "getClassName" в коде.

Nexus 07.03.2019 14:01

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>

Блондинка 07.03.2019 14:14

Добавила классы .xyz4 .xyz5 .xyz6 .xyz7 добавила ссылки

Блондинка 07.03.2019 15:22

одного не могу понять, почему я ничего не вижу нажав на кнопку посмотреть в этом сообщении, вернее ссылки как были синие...
Цитата:

Сообщение от Nexus (Сообщение 504497)
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>


Nexus 07.03.2019 16:19

Блондинка,
Цитата:

Сообщение от Блондинка
одного не могу понять, почему я ничего не вижу нажав на кнопку посмотреть в этом сообщении, вернее ссылки как были синие

Ссылка "transform" должна стать красной и сменить текст на "someText".
Ссылки "CCS3" и "CSS" остались синими, поскольку они не имеют отношения к текущему пути, т.к. у них в адресе нет директории "menu".

Блондинка 08.03.2019 01:27

Во блин, с каждым разом все больше загадок, почему то ссылка "transform" осталась синей? что такое "someText" и зачем оно нужно? вопрос в названии я написала "и одну ссылку заменить на текст?" а не "изменить текст ссылки"

Блондинка 08.03.2019 02:07

вот почти работающий скрипт
(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" и дальше чтобы можно было в скрипте изменить названия классов потом в стиле прописать эти классы чтобы было интуитивно понятно чему соответствует каждый класс, и выбросить и скрипт и стиль в отдельные файлы

Nexus 08.03.2019 08:05

Цитата:

Сообщение от Блондинка
почему то ссылка "transform" осталась синей

Консоль не смотрели?
Цитата:

Сообщение от Блондинка
я написала "и одну ссылку заменить на текст?" а не "изменить текст ссылки"

Не так понял

Попробуйте так:
(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);
                }));
        });
})();

Блондинка 08.03.2019 09:19

11 строчка var maxPostfix = 3; это степень вложенности? и надо обернуть в конструкцию DOMContentLoaded?


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