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)

Nexus 11.03.2019 15:14

Цитата:

Сообщение от Блондинка
http://plnkr.co с телефона не откроешь

Результат открыть можно: http://run.plnkr.co/cGjIpitTos1P48vD/
upd. это была временная ссылка, во всяком случае открыть результат с новом окне можно умудриться.
Тут со смартфона вполне удобно просматривать результат: http://embed.plnkr.co/sEkReyGqTJvgPLIdULKV/

Цитата:

Сообщение от Блондинка
а каждый раз бегать к соседям на пк, так они просто пошлют

Чем я вам с этим могу помочь?

Блондинка 11.03.2019 16:21

И как сейчас исправить ситуацию?
<!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>


Я же писала что ссылка "transform" должна стать просто текстом "transform" зачем 36 строка? Причём тут 'someText'?

Nexus 11.03.2019 16:27

Цитата:

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

Какую ситуацию?

Прочитайте про форматирование на форуме и выполнение кода: http://javascript.ru/formatting

Блондинка 11.03.2019 16:36

Цитата:

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

Вот...

Блондинка 11.03.2019 16:41

а вот ответ

Цитата:

Сообщение от Nexus (Сообщение 504528)
.....
Не так понял
.....


Nexus 11.03.2019 17:02

Цитата:

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

Ссылка была заменена на span с текстом.
«someText» замените на нужное значение.

Я выпиливаюсь из топика, так можно до Китайской Пасхи продолжать.

Блондинка 11.03.2019 17:13

Просто ссылка должна заменится на спан с тем же текстом, а не вставлять новый какой-то текст...

Nexus 11.03.2019 17:27

Блондинка, вместо 'someText' вставьте node.textContent.

Блондинка 11.03.2019 17:43

Фух, наконец то всё работает...

MC-XOBAHCK 12.03.2019 01:14

Цитата:

Сообщение от Malleys
MC-XOBAHCK, Это вторая серия вопросов, на первую вы так и не ответили!

А что я там мог вам ответить если я даже смысла того задания не понял? У меня уровень явно не тот чтобы с вами спорить.

Цитата:

Сообщение от Malleys
Но при чём тут цвет волос?

Я извиняюсь перед девушкой, если её мои слова оскарбили. Больше так не буду.

Блондинка 12.03.2019 01:18

MC-XOBAHCK,
твои слова просто улыбнули, и напомнили кучу анекдотов про блонди, так что извинения излишни.

Блондинка 23.03.2019 10:48

Nexus, Malleys, помогите исправить этот скрипт

<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 = node.textContent;
textNode.className = className;
node.parentNode.insertBefore(textNode, node);
node.parentNode.removeChild(node);
});
});
});
</script>

Блондинка 23.03.2019 10:53

9-12 строчки заменить на массив ['xyz1', 'xyz2', 'xyz3', 'xyz4', 'xyz5']

Блондинка 23.03.2019 17:20

как сделать массив?

Malleys 23.03.2019 17:25

Вы имеете в виду так?

var getClassName = function(index) {
return ['xyz1', 'xyz2', 'xyz3', 'xyz4', 'xyz5'][index];
};


А я думаю так!
function getClassName(index) {
	return 'xyz' + (index + 1);
};


Вам не учебник надо создавать, а учебник надо читать! https://learn.javascript.ru/ Вы уж не сердитесь, но вы такое читали?

И почему вы всегда всё пишете в один столбик? И даже если вам в примере напечатают код с отступами, вы все сворачиваете в одну сплошную простыню! (помните про маятник!) Рулоны кода!

Блондинка 23.03.2019 18:10

Цитата:

Сообщение от Malleys
var getClassName = function(index) {
return ['xyz1', 'xyz2', 'xyz3', 'xyz4', 'xyz5'][index];
};

ну да, чтобы можно было не xyz, с цифрой, а абсолютно разные имена классам задать, из таксономии растений

Блондинка 25.03.2019 15:30

Nexus,
насколько я поняла, если создать массив, то спан должен быть последним в массиве? возможно ли сделать чтобы было наоборот, сначала в массиве идёт наибольшее вложение и дальше по убыванию? и второй вопрос, можно ли сделать чтобы скрипт автоматически считал количество объектов в массиве и вставлял в 12 строку?

Nexus 25.03.2019 15:37

Цитата:

Сообщение от Блондинка
если создать массив, то спан должен быть последним в массиве?

Не понял.

Цитата:

Сообщение от Блондинка
возможно ли сделать чтобы было наоборот, сначала в массиве идёт наибольшее вложение и дальше по убыванию?

Можно.

Цитата:

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

В каком массиве? Каких объектов? Вставлял как значение переменной maxPostfix?

Блондинка 25.03.2019 16:56

1. Ссылка которая заменяется на спан, тоесть самая последняя (с макс вложенностью.
3. В массиве (пост 55), объектов(ссылок), да переменной maxPostfix.

Блондинка 25.03.2019 17:09

9-11 строчки если заменить на массив
var getClassName = function(index) {
return ['xyz1', 'xyz2', 'xyz3', 'xyz4', 'xyz5'][index];
};
в котором пять объектов-ссылок с именами классов xyz*

Блондинка 26.03.2019 11:26

Nexus, ?

Блондинка 26.03.2019 12:35

Цитата:

Сообщение от Блондинка (Сообщение 505451)
Фух, хоть кто-то ответил, я уже думала что все увидев мой вопрос в их адрес сразу выходят с форума, неудивлюсь если на днях увижу в сети серию анекдотов "блонди и яваскрипт"

ну точно, я угадала, все увидев меня срочно ретируются

Nexus 26.03.2019 12:44

Блондинка, не до конца понятно, что вы хотите, а что-то править основываясь на догадках не хочу.
Вчера какое-то представление о вашей цели было, сегодня нет.

Напишите, что конкретно вы хотите получить без использования слов "массив", "объект" и т.п.

Блондинка 26.03.2019 13:16

что бы ссылкам присваивался класс не xyz с номером 1-20 а абсолютно разные имена классов, xyz, zyx, abc, cba, и так далее, я просто в скрипте пишу нужные имена классов начиная от наибольшей вложенности, плюс скрипт считает сколько я внесла имен классов и это значение присваивает переменной maxPostfix.

Nexus 26.03.2019 13:30

Блондинка, сразу бы так...
Не тестировал.
var classes = ['latest', 'second', 'first'];
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 reversedClasses = classes.reverse();
    var getClassName = function(index) {
        return reversedClasses[index];
    };

    var maxPostfix = classes.length;
    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 = node.textContent;
            textNode.className = className;
            node.parentNode.insertBefore(textNode, node);
            node.parentNode.removeChild(node);
        });
    });
});

Блондинка 26.03.2019 16:12

Nexus,
а можно вопросик? что значит эта строчка
var uriWithoutParams = '/menu/css/css3/transform.html'.split(/[#|?]+/i).shift();

может правильнее было бы заменить на что-то типа location host?

Nexus 26.03.2019 16:16

Блондинка, это тестовый текущий путь. Стройкой выше был закомментирован правильный вариант.

Блондинка 26.03.2019 16:30

Nexus,
тоесть если я правильно поняла третью строку-коментирование надо удалить а четвёртую заменить на
var uriWithoutParams=location.pathname.split(/[#|?]+/i).shift();

Nexus 26.03.2019 16:40

Блондинка, в начале третье строки две кривые черточки нужно удалить, а в начале четвертой наоборот - добавить (ну или удалить эту строку вообще).

Malleys 26.03.2019 16:47

Цитата:

Сообщение от Блондинка
ну точно, я угадала, все увидев меня срочно ретируются

Вы абсолютно заблуждаетесь! Вас никто не видел!

Блондинка 26.03.2019 16:53

document.addEventListener('DOMContentLoaded', function() {
    const uriWithoutParams=location.pathname.split(/[#|?]+/i).shift();
    var extension = uriWithoutParams.split('.').pop();
вроде так

Блондинка 26.03.2019 16:55

Malleys,
не может быть такого ;)

Nexus 26.03.2019 17:08

Блондинка, "const" на "var" замените, чтоб не выделялся.

Блондинка 26.03.2019 17:09

Nexus,
:thanks:

Блондинка 28.03.2019 15:39

блин, походу я опять накосячила тут

Nexus 28.03.2019 15:44

Блондинка, сочувствую.

Malleys 28.03.2019 15:58

Цитата:

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

Да, очень сильно. Не вводите людей в заблуждение, замените CSS3 на CSS Transforms Level 1. И уже существует черновик CSS Transforms Level 2 в котором определены новые свойства: rotate, translate, scale! (И даже работает в Chrome (по моему только пока под флагами, это у меня они включены, или без флагов тоже?))

Может вам хотя бы сразу сделать, чтобы выводило все свойства, хотя бы даже без примеров, просто страница с меню и название, а то куда сейчас не нажми, Error 404: Запрошенная страница или файл не найдены на этом сайте. Зато у нас есть: ХХХ.

А то вы делаете для одной страницы, а потом смотришь, а на другой не будет работать, или не так как надо и опять всё переделывать!

Вот вам ссылка на объект с описанием свойств CSS: https://github.com/LeaVerou/css3test...pages/tests.js Я вам уже об этом писал.

Блондинка 28.03.2019 16:26

Malleys,
причём тут error? есть сайт, на нём есть главная страница, пусть будет /index.html или /мой_сайт.html или ещё как названа неважно, также в папке есть главная страница с каким либо именем, скрипт должен подсвечивать ссылки имеющие отношение к текущему пути, независимо от того как названа главная страница папки и независимо от того как прописан адрес, абсолютный или относительный с http://moi_sait.ru или без, с указанием названия страницы или просто scr="/" речь идет только о подсветке пунктов меню которые имеют отношение к текущему пути и о подсветке текущей страницы ссылку на которую заменили на спан

Nexus 28.03.2019 16:40

Блондинка, не знаю в какой строке, но следующий участок должен выглядеть так:
var getClassName = function(index) {
        return reversedClasses[index-1];
    };

Весь путь у вас не подсвечивается, потому что у вас страницы разделов как попало названы.
/menu/css/css3/transform.html
/menu/css/css3/
/menu/index.html
/menu.html

Сложно написать скрипт, который будет подсвечивать ссылки, имеющие отношение к текущему пути, когда страницы разделов именуются по велению левой пятки.

Блондинка 28.03.2019 17:20

Nexus главная страница раздела может иметь только два имени, или .../css3/index.html или .../css3/css3.html и соответственно может сокращаться до .../css3/ без index.html


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