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)

Блондинка 01.03.2019 01:29

можно ли изменить цвет ссылок? и одну ссылку заменить на текст?
 
есть страничка .html которая находиться в папке css3 а эта папка в другой папке css, сама страница имеет такой адрес /css/css3/transform.html возможно ли сделать чтобы ссылка на саму себя заменялась текстом и была другого цвета, как у класса xyz3, ссылка на папку css3 стала цвета как у класса xyz2, а ссылка на папку css стала цвета как у класса xyz1?
вот сама страничка
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="https://www.w3.org/1999/xhtml">
<head>

<title>transform</title>
</head>
<body>
<style type="text/css">
body { font: 14px normal Times, serif; }
div { border: 1px solid #ccc; padding 5px; margin: 5px; }
a { text-decoration: none; color: #3c3vff; }
.xyz1 { color: #009900; }
.xyz2 { color: #11b311; }
.xyz3 { color: #28cc28; }
</style>
<div>
<a href="/html.html">HTML</a> 
<a href="/css.html">CSS</a> 
<a href="/js.html">JS</a> 
</div>
<div>
<a href="/css/css3.html">CSS3</a><br/>
<div>
<a href="/css/css3/transform.html">transform</a><br/>
<a href="/css/css3/transform-origin.html">transform-origin</a><br/>
<a href="/css/css3/transform-style.html">transform-style</a><br/>
</div>
</div>
</body>
</html>

EvgeniySaschenko 01.03.2019 03:50

Можно. Но тебе придётся сверстать все эти страницы и установить нужный класс для каждой ссылки на каждой странице.

MC-XOBAHCK 01.03.2019 03:54

Цитата:

Сообщение от Блондинка
есть страничка .html которая находиться в папке css3 а эта папка в другой папке css, сама страница имеет такой адрес /css/css3/transform.html

Внатури блондинка : )

Цитата:

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

Скрипт только для этой части:
let page = window.location.pathname;
let links = document.querySelectorAll('a');

for (let i = 0; i < links.length; i++) {
    if (links[i].pathname == page) {
        links[i].outerHTML = '<span class="xyz3">' + links[i].textContent + '</span>';
    }
}

Остальное тоже можно реализовать и там не сложно, но это просто жесть с такими путями...

Блондинка 01.03.2019 05:03

MC-XOBAHCK,
Твой скрипт не хочет выполнять задачу
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="https://www.w3.org/1999/xhtml">
<head>
<title>transform</title>
</head>
<body>
<style type="text/css">
body { font: 14px normal Times, serif; }
div { border: 1px solid #ccc; padding: 5px; margin: 5px; }
a { text-decoration: none; color: #3c3vff; }
.xyz1 { color: #009900; }
.xyz2 { color: #11b311; }
.xyz3 { color: #28cc28; }
</style>
<body>
<script>
let page = window.location.pathname;
let links = document.querySelectorAll('a');
for (let i = 0; i < links.length; i++) {
    if (links[i].pathname == page) {
        links[i].outerHTML = '<span class="xyz3">' + links[i].textContent + '</span>';
    }
}
</script>
<div>
<a href="/html.html">HTML</a> 
<a href="/css.html">CSS</a> 
<a href="/js.html">JS</a> 
</div>
<div>
<a href="/css/css3.html">CSS3</a><br/>
<div>
<a href="/css/css3/transform.html">transform</a><br/>
<a href="/css/css3/transform-origin.html">transform-origin</a><br/>
<a href="/css/css3/transform-style.html">transform-style</a><br/>
</div>
</div>
</body>
</html>



Ой, двоеточие пропустила после padding

MC-XOBAHCK 01.03.2019 13:16

Блондинка, а ты его поставь перед закрывающимся тегом body или оберни в конструкцию DOMContentLoaded:
document.addEventListener('DOMContentLoaded', function() {
    let page = window.location.pathname;
    let links = document.querySelectorAll('a');
    for (let i = 0; i < links.length; i++) {
        if (links[i].pathname == page) {
            links[i].outerHTML = '<span class="xyz3">' + links[i].textContent + '</span>';
        }
    }
});

https://learn.javascript.ru/onload-ondomcontentloaded

Nexus 01.03.2019 13:30

Цитата:

Сообщение от MC-XOBAHCK
но это просто жесть с такими путями...

Что с ними не так?
Это вполне может быть какой-то учебник либо набор шпаргалок.

Если страниц будет много, то без backend'а будет туго.

Блондинка 04.03.2019 09:45

MC-XOBAHCK,
Так?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="https://www.w3.org/1999/xhtml">
<head>
<title>transform</title>
<style type="text/css">
body { font: 14px normal Times, serif; }
div { border: 1px solid #ccc; padding: 5px; margin: 5px; }
a { text-decoration: none; color: #3c3vff; }
.xyz1 { color: #009900; }
.xyz2 { color: #11b311; }
.xyz3 { color: #28cc28; }
</style>
<script>
document.addEventListener('DOMContentLoaded', function() {
    let page = window.location.pathname;
    let links = document.querySelectorAll('a');
    for (let i = 0; i < links.length; i++) {
        if (links[i].pathname == page) {
            links[i].outerHTML = '<span class="xyz3">' + links[i].textContent + '</span>';
        }
    }
</script>
</head>
<body>
<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="/css/css3/transform.html">transform</a><br/>
<a href="/css/css3/transform-origin.html">transform-origin</a><br/>
<a href="/css/css3/transform-style.html">transform-style</a><br/>
</div>
</div>
</body>
</html>

Всё равно не хочет выполнять

Блондинка 04.03.2019 10:07

Nexus,
Ну что-то типа учебника па хатеэмэл и цеэсэс, и нада для второга сайта, про таксономию растений, но там адреса еще длиннее, Домен: /Царство/Подцарство/Отдел/Класс/Надпорядок/Порядок/Семейство/Подсемейство/триба/род/

Malleys 06.03.2019 16:20

Цитата:

Сообщение от MC-XOBAHCK
Цитата:

Сообщение от Блондинка
есть страничка с расширением html которая находится в папке css3, а эта папка в другой папке css, сама страница имеет такой адрес /css/css3/transform.html

Внатури блондинка : )

MC-XOBAHCK, так каким же образом классификация содержимого зависит от цвета волос? (Это вторая серия вопросов, на первую вы так и не ответили! https://javascript.ru/forum/showthre...771#post496771)

Другое дело, если вы хотели обратить внимание на мифический CSS3, про который некоторые странные люди жужжат себе под нос, но ничего не могут объяснить или показать, поскольку такого не существует и нет спецификации, определяющей такое понятие! Но при чём тут цвет волос?

Или же вы хотели обратить внимание на то, что модуль первой версии (а CSS Transforms сейчас именно первой версии) находится в папке со странным названием. Более практичней было бы распределить модули по папкам. Тогда сразу видна вся история развития модуля и папки имеют более осмысленные названия! Но при чём тут цвет волос?

Ссылка перестаёт быть ссылкой, если у неё удалить атрибут href. (Скрипт перед закрывающим тегом body)
[...document.links].forEach(link => {
	if(location.pathname === link.pathname)
		link.removeAttribute("href");
});


В зависимости от того, куда указывает ссылка, её можно по разному раскрашивать!
a {
	text-decoration: none;
	color: #3c3cff;
}

a[href*="css"] {
	color: #009900;
}

a[href*="css3"] {
	color: #11b311;
}

/* это не работает ни в каком браузере(март 2019), поэтому пока нужен временный скрипт */
a:local-link {
	color: #28cc28;
	pointer-events: none;
	color: inherit;
}

/* для временного скрипта */
a:not([href]) {
	color: #28cc28;
	pointer-events: none;
	color: inherit;
}


Цитата:

Сообщение от Nexus
Если страниц будет много, то без backend'а будет туго.

А кто запретил отделить содержимое от его представления?

Nexus 06.03.2019 16:32

Цитата:

Сообщение от Malleys
А кто запретил отделить содержимое от его представления?

Откровенно говоря не понял, что вы имеете ввиду.

Отделить контент от представления можно и это будет правильно, но как это противоречит тому, что вы процитировали?

Malleys 06.03.2019 21:09

Да, нужно уточнение! Вы сказали: «без backend'а будет туго». Да, это так и есть! Если потребуется изменить или добавить, например, какой-либо пункт меню или ещё что, то придётся редактировать каждый файл.

Из высказывания «без backend'а будет туго» следует, что лучшим решением будет завести сервер, который будет при каждом запросе генерировать необходимое содержимое, основываясь на запросе, данных подходящих под этот запрос и шаблоне. И это хорошо! Но на самом ли деле нужен такой сервер?

Не достаточно ли этого? (файл index.html)
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
</head>
<body>
	<script src="app.js"></script>
</body>
</html>


Конечно же оно может и не так радикально (так мало HTML) выглядеть, там могут быть естественно <template> или сразу подготовлены элементы, в которые будут вставляться данные, или сами элементы меняться. Суть в том, что это и есть шаблон, который меняется в одном месте! А в скрипте или в коде программы, описано, что и как показывать (например, это может зависеть от URL(в котором меняется только #hash, т. е. изменения внедряются тогда, когда происходит событие hashchange))

Данные тогда не нужно запихивать в HTML на сервере, поскольку данные в чистом виде могут быть загружены с сервера. Их легко обрабатывать и выводить (а не так, что сервер возвращает отрисованную страницу, и затем скрипт в клиентской части что-то ещё пытается делать с той страницей, и потом уже совсем не понятно, а это на клиенте поменялось или на сервере так отрисовалось.)

Чистые данные? Какие бы данные не были (справочные материалы или документация или товары в магазине или покемоны с их местоположением и временем появления или расписание транспорта или ещё что), то они должны быть представлены без разметки. Т. е. данные представлены так, что их легко анализировать (не из извлекать из DOM, который может сильно завязан на том, как данные визуально выглядят) Таким форматом может быть markdown, json-p, json, csv, или какой либо свой собственный бинарный формат (вам придётся написать свой парсер)

В большинстве случаев подходит JSON, но если вы захотели клиенту отдать сразу всю базу данных, то JSON может быть слишком многословен, и вы захотите отдавать данные в csv или бинарном формате!

Вот пример: (характерный код, обрабатывающий уже отрисованную страницу, код взят с сайта govnokod.ru c незначительным изменением, вся проблема в том, что данные извлекаются из DOM)
var text_message = "";
for(var i = 0, i <= 5; i++) {
	text_message += "\n Вопрос №" + (i + 1) + ": " + $('input[name=question_' + i +']:checked').parent().parent().parent().find(".title").text() + " Ответ: " + $('input[name=question_' + i +']:checked').val();
}


Вот тот же пример, но с чистыми данными!
var data = [];
var text_message = data.map(({ question, answer }, i) => `Вопрос №${i + 1}: ${question} Ответ: ${answer}`).join("\n");


Вы правда можете спросить, а какая разница, извлечь данные из DOM или скачать с сервера? Для того, чтобы их туда поместить, требуется лишняя операция по размещению их там! (Не говоря о том, что такой код получается запутанней) Более практичней было бы размещение в DOM <script> c необходимым объектом. Например, объект со статичными текстами приложения могут быть сразу вставлены на страницу, а затем по мере необходимости, когда пользователь выберет другой язык, будет подгружен скрипт со данными нового языка по принципу json-p, все такие скрипты могут быть заранее сгенерированы!

Польза? Вместо того, чтобы всё время дёргать сервер, мы сразу получаем данные, которые во время сессии не поменяются. И даже интерактивные данные тоже, они должны быть чистыми! Пример сайта с таким подходом https://transport.tallinn.ee/

Кто-то может сказать, что с таким #hash Google сайт не видит, это обман, всё работает нормально. На этом форуме обсуждалось про #hash! https://javascript.ru/forum/misc/639...7parse%27.html

Блондинка 07.03.2019 06:26

Ясна, тут никто не может помочь, как и ва всем интернете, нужен такой скрипт каторый сначала найдет ссылку на эту страницу заменит на текст и тексту присвоит класс, потом найдет ссылку на папку обрезав адрес от точки до первого слеша включителна, присвоит класс или заменит на нужный, потом найдет ссылку обрезав от точки до второва слеша и присвоит класс, и так да тех пор пока не астанется ссылка на главную папку типа http://сайт.ru/папка и скрипт должен работать независимо от того как прописаны ссылки с слешем или без слеша и даже если указан абсолютно путь начиная от http://

Nexus 07.03.2019 08:22

Цитата:

Сообщение от Malleys
Из высказывания «без backend'а будет туго» следует, что лучшим решением будет завести сервер, который будет при каждом запросе генерировать необходимое содержимое, основываясь на запросе, данных подходящих под этот запрос и шаблоне.

Я не имел ввиду конкретно этот вариант рендеринга, однако он, пожалуй, самый простой.

Nexus 07.03.2019 09:34

Блондинка, попробуйте так:
(()=>{
	const uriWithoutParams=location.pathname.split(/[#|?]+/i).shift();
	const extension=uriWithoutParams.split('.').pop();
	const uriParts=uriWithoutParams.replace('.'+extension,'').split('/').filter(part=>part.length);
	const getClassName=index=>'xyz'+index;
	
	uriParts.forEach((uri,index)=>{
		uri='/'+uriParts.slice(0,++index).join('/')+'.'+extension;
		const className=getClassName(index);
		
		document.querySelectorAll(`a[href="${uri}"]`).forEach(node=>{
			node.classList.add(className);
		});
	});
})();

Блондинка 07.03.2019 11:06

Nexus,
так?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="https://www.w3.org/1999/xhtml">
<head>
<title>transform</title>
<style type="text/css">
body { font: 14px normal Times, serif; }
div { border: 1px solid #ccc; padding: 5px; margin: 5px; }
a { text-decoration: none; color: #3c3vff; }
.xyz1 { color: #009900; }
.xyz2 { color: #11b311; }
.xyz3 { color: #28cc28; }
</style>
<script>
(()=>{
	const uriWithoutParams=location.pathname.split(/[#|?]+/i).shift();
	const extension=uriWithoutParams.split('.').pop();
	const uriParts=uriWithoutParams.replace('.'+extension,'').split('/').filter(part=>part.length);
	const getClassName=index=>'xyz'+index;
	
	uriParts.forEach((uri,index)=>{
		uri='/'+uriParts.slice(0,++index).join('/')+'.'+extension;
		const className=getClassName(index);
		
		document.querySelectorAll(`a[href="${uri}"]`).forEach(node=>{
			node.classList.add(className);
		});
	});
})();
</script>
</head>
<body>
<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="/css/css3/transform.html">transform</a><br/>
<a href="/css/css3/transform-origin.html">transform-origin</a><br/>
<a href="/css/css3/transform-style.html">transform-style</a><br/>
</div>
</div>
</body>
</html>

Nexus 07.03.2019 11:14

Блондинка, вам уже писали про DOMContentLoaded, примените полученные знания и заработает.
Код работоспособен: https://jsfiddle.net/x89bscga/

Блондинка 07.03.2019 12:51

так?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="https://www.w3.org/1999/xhtml">
<head>
<title>transform</title>
<style type="text/css">
body { font: 14px normal Times, serif; }
div { border: 1px solid #ccc; padding: 5px; margin: 5px; }
a { text-decoration: none; color: #3c3vff; }
.xyz1 { color: #009900; }
.xyz2 { color: #11b311; }
.xyz3 { color: #28cc28; }
</style>
<script>
document.addEventListener('DOMContentLoaded', (()=>{
	const uriWithoutParams=location.pathname.split(/[#|?]+/i).shift();
	const extension=uriWithoutParams.split('.').pop();
	const uriParts=uriWithoutParams.replace('.'+extension,'').split('/').filter(part=>part.length);
	const getClassName=index=>'xyz'+index;
	
	uriParts.forEach((uri,index)=>{
		uri='/'+uriParts.slice(0,++index).join('/')+'.'+extension;
		const className=getClassName(index);
		
		document.querySelectorAll(`a[href="${uri}"]`).forEach(node=>{
			node.classList.add(className);
		});
	});
})();
</script>
</head>
<body>
<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="/css/css3/transform.html">transform</a><br/>
<a href="/css/css3/transform-origin.html">transform-origin</a><br/>
<a href="/css/css3/transform-style.html">transform-style</a><br/>
</div>
</div>
</body>
</html>

Nexus 07.03.2019 12:58

Блондинка, почти
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="https://www.w3.org/1999/xhtml">
<head>
<title>transform</title>
<style type="text/css">
body { font: 14px normal Times, serif; }
div { border: 1px solid #ccc; padding: 5px; margin: 5px; }
a { text-decoration: none; color: #3c3vff; }
.xyz1 { color: #009900; }
.xyz2 { color: #11b311; }
.xyz3 { color: #28cc28; }
</style>
<script>
	document.addEventListener('DOMContentLoaded', ()=>{
		const uriWithoutParams=location.pathname.split(/[#|?]+/i).shift();
		const extension=uriWithoutParams.split('.').pop();
		const uriParts=uriWithoutParams.replace('.'+extension,'').split('/').filter(part=>part.length);
		const getClassName=index=>'xyz'+index;
		
		uriParts.forEach((uri,index)=>{
			uri='/'+uriParts.slice(0,++index).join('/')+'.'+extension;
			const className=getClassName(index);
			
			document.querySelectorAll(`a[href="${uri}"]`).forEach(node=>{
				node.classList.add(className);
			});
		});
	});
</script>
</head>
<body>
<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="/css/css3/transform.html">transform</a><br/>
<a href="/css/css3/transform-origin.html">transform-origin</a><br/>
<a href="/css/css3/transform-style.html">transform-style</a><br/>
</div>
</div>
</body>
</html>

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

Отлично обновляется страница переходя на саму себя и ссылки как были все одного цвета так и остались синие

Nexus 07.03.2019 13:32

Цитата:

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

Выше была ссылка на jsfiddle, все работает.
Ищите и устраняйте ошибку.

Создайте тему в разделе «Работа» указав сумму вознаграждения.
После выполнения исполнителем работы при возникновении ошибок сможете предъявить исполнителю претензии.

Здесь же, без строчки собственного кода, это неуместно.

Блондинка 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?

Nexus 08.03.2019 17:51

Цитата:

Сообщение от Блондинка
это степень вложенности

Это максимальное значение циферки, которая будет добавляться к строке "xyz".
При maxPostfix=3 у ссылки будет класс:
/menu/css/css3/transform.html - xyz3,
/menu/css/css3.html - xyz2,
/menu/css.html - xyz1

Цитата:

Сообщение от Блондинка
до обернуть в конструкцию DOMContentLoaded?

Да

Блондинка 08.03.2019 18:30

Ну как всегда я где-то накосячила...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="https://www.w3.org/1999/xhtml">
<head>
<title>transform</title>
<style type="text/css">
body { font: 14px normal Times, serif; }
div { border: 1px solid #ccc; padding: 5px; margin: 5px; }
a { text-decoration: none; color: #3c3vff; }
.xyz1 { color: #009900; }
.xyz2 { color: #11b311; }
.xyz3, .xyz4, .xyz5, .xyz6 .xyz7 { color: #28cc28; }
</style>
<script>
document.addEventListener('DOMContentLoaded',(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 = 5;
        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);
                }));
        });
}))();

</script>
</head>
<body>
<div class="menu" id="menu1">
<a href="/menu/html.html">HTML</a> 
<a href="/menu/css.html">CSS</a> 
<a href="/menu.html">menu</a> 
<a href="/js.html">JS</a> 
</div>
<div class="menu" id="menu2">
<a href="/menu/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>
</body>
</html>

или дело в браузере? на тел без изменений...

Nexus 09.03.2019 11:27

Блондинка, у вас ошибки в 13 и 41 строках, касаются скобочек.

Блондинка 09.03.2019 12:22

13 ст. document.addEventListener('DOMContentLoaded',funct ion() {
так?

Блондинка 09.03.2019 12:24

41 ст. })());
так?

Блондинка 10.03.2019 09:20

и тишина... и никто не подскажет как правильно поставить скобки...

Nexus 10.03.2019 11:00

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

Блондинка 10.03.2019 11:53

Я уже вариантов 50 перепробовала, всё не работает, может дело в
Цитата:

Сообщение от Malleys (Сообщение 502300)
UPD
или если нужна поддержка в старых браузерах (увидел doctype),

в другом?

Nexus 11.03.2019 10:09

http://plnkr.co/edit/sEkReyGqTJvgPLIdULKV?p=preview

Блондинка 11.03.2019 14:24

Попробую на словах объяснить, раз не получается скриншот загрузить, сайты https://jsfiddle.net и http://plnkr.co с телефона не откроешь, а каждый раз бегать к соседям на пк, так они просто пошлют.


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