Вопрос по JavaScript (простой)

12
SN
На сайте с 04.07.2013
Offline
84
916

Хочу чтобы при нажатии на блок div менялся размер шрифта на всем сайте (текста который заключен между <p></p>).

Прописал такой код:

<div onClick="document.getElementsByTagName('p').style.fontSize='16px';"></div>

но он не работает.

Если прописать

<div onClick="document.getElementsByTagName('p')[0].style.fontSize='16px';"></div>

то меняется размер шрифта только первого абзаца.

Скажите как правильно прописать чтобы изменялся размер шрифта у тегов <p> на всем сайте?

Спасибо

D
На сайте с 14.01.2007
Offline
153
#1

короткий ответ: никак

длинный: вариантов на самом деле несколько

1. использовать цикл

2. использовать addRule/insertRule http://stackoverflow.com/questions/6000077/changing-class-styles-dynamically-without-a-loop

3. стрелять в голову http://stackoverflow.com/questions/4232557/jquery-css-write-into-the-style-tag - ответ с большинством голосов

Ayavryk
На сайте с 11.10.2003
Offline
209
#2

Не стоит напрямую в стили лезть. Разрулите через CSS

HTML:

<div class="content">

<p>First</p>

<p>Next</p>

</div>

JS:

document.getElementById("content").className = "firstParagraph";

document.getElementById("content").className = "allParagraph";

CSS:

.allParagraph p {font-size:150%}

.firstParagraph p:first-child {font-size:150%}

Тынгыр, мынгыр, комсомол (http://erum.ru). Ехари, ехари, (жалобно) аяврик. /народная тунгусская песня/
D
На сайте с 14.01.2007
Offline
153
#3

Ayavryk, это если знать, что всё только "p" ограничится. тогда можно сразу всем "p" класс влепить и дело с концом. но кто ж знает, что у ТС в голове?

Ayavryk
На сайте с 11.10.2003
Offline
209
#4
Dinozavr:
но кто ж знает, что у ТС в голове?

Ну да, был невнимателен. Хотя ответ "никак" вряд ли правильный. Сделать можно что угодно. Проблема только в том во что это выльется.

SeoNk,Вы хотите чтобы у вас разом сменился стиль по всему сайту?

SN
На сайте с 04.07.2013
Offline
84
#5
Ayavryk:
Ну да, был невнимателен. Хотя ответ "никак" вряд ли правильный. Сделать можно что угодно. Проблема только в том во что это выльется.

SeoNk,Вы хотите чтобы у вас разом сменился стиль по всему сайту?

Спасибо!

Совет оказался то что мне нужно. А вот по поводу того что стиль должен смениться сразу по всему сайту я раньше не подумал. Да он дрлжен меняться по всему сайту!

Задумка такая - на сайте хочу реализовать версию для слабовидящих, где они смогут увеличить шрифт и выбрать контрастность. Браузер должен запоминать эти настройки и при перемещении по ссылкам сайта. Подскажите как это возможно реализовать?

У меня получилось менять стили, но только на текущей странице. При ее обновлении все стили сбрасываются на значение по умолчанию.

tommy-gung
На сайте с 22.11.2006
Offline
287
#6

запоминать в куки

Здесь не могла быть ваша реклама
D.iK.iJ
На сайте с 26.05.2013
Offline
224
#7

Это довольно элементарно, думаю. Пример для смены на всем сайте

<center>
<a href="javascript: change1('');">Нет</a>
<a href="javascript: change1('Tahoma');">Tahoma</a>
<a href="javascript: change1('Veranda');">Veranda</a>
<a href="javascript: change1('Arial');">Arial</a>
<br>
<a href="javascript: change2('');">Нет</a>
<a href="javascript: change2('80%');">80%</a>
<a href="javascript: change2('100%');">100%</a>
<a href="javascript: change2('120%');">120%</a>
<br>
<a href="javascript: change3('');">Нет</a>
<a href="javascript: change3('#000000');">#000000</a>
<a href="javascript: change3('#666666');">#666666</a>
<a href="javascript: change3('#ffffff');">#ffffff</a>
<a href="javascript: change3('red');">red</a>
</center>

<script><!--
function change1(h1) {document.body.style.fontFamily=h1;}
function change2(h2) {document.body.style.fontSize=h2; for(var a=0; a<=document.getElementsByTagName('tbody').length; a++){document.getElementsByTagName('tbody')[a].style.fontSize=h2;}}
function change3(h3) {document.body.style.color=h3;}
--></script>

Могу вам за 2 минуты сделать с запоминанием в куки, если надо :)

Адаптивный дизайн в 2 строчки ( https://dikij.com/wm/adaptaciya-saytov.php ). + Принимаю заказы любой сложности ( https://searchengines.guru/ru/forum/926323 ). 💎 Еще я делаю классные кулоны с опалами ( https://mosaicopal.ru/ ).
Ayavryk
На сайте с 11.10.2003
Offline
209
#8
SeoNk:
Задумка такая - на сайте хочу реализовать версию для слабовидящих, где они смогут увеличить шрифт и выбрать контрастность. Браузер должен запоминать эти настройки и при перемещении по ссылкам сайта. Подскажите как это возможно реализовать?.

Думаю не очень хорошая идея разруливать через JS. Те кто плохо видит и так ставят большой масштаб/шрифт

если сильно надо, то надо идти другим путем.

1. сделать отдельный CSS-файл для слабовидящих.

2. при нажатии на кнопку подгрузить динамически этот СSS и сохранить куку.

3. В head прописать проверку куки и подгрузку дополнительного CSS

А делать так, как написал DiKiJ плохо. Экран дрыгаться будет.

D.iK.iJ
На сайте с 26.05.2013
Offline
224
#9
Ayavryk:
А делать так, как написал DiKiJ плохо. Экран дрыгаться будет.

Самый быстрый способ.

У себя сделал так, что при выборе показывает сразу на JavaScript, а потом на PHP выводит нужный стиль. :)

Ayavryk
На сайте с 11.10.2003
Offline
209
#10
DiKiJ:
Самый быстрый способ. У себя сделал так, что при выборе показывает сразу на JavaScript, а потом на PHP выводит нужный стиль. :)

У вас там идет перебор DOM:

for(var a=0; a<=document.getElementsByTagName('tbody').length; a++){document.getElementsByTagName('tbody')[a].style.fontSize=h2;}

Это лишнее. Броузер сам переопределит все стили если вы ему подсунете дополнительный CSS.

Кстати, у вас код жутко кривой. Вы в каждом цикле заново ищете по DOM все tbody. Если вынести document.getElementsByTagName('tbody') за цикл, то скорость существенно вырастет.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий