powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Что-то типа макроподстановки в теге <div>
25 сообщений из 25, страница 1 из 1
Что-то типа макроподстановки в теге <div>
    #38070649
Фагот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Не спец. ни с HTML, ни с JavaScript, ни с CSS, поэтому вопрос возник!

Тег:
<div class="spoilertop" onClick="openClose( '1fddfa055d48476064dcd80f8815bdec' )" style="font-weight: bold">..........</div>

образует на экране форума раскрывающийся спойлер, как я понимаю, с именем '1fddfa055d48476064dcd80f8815bdec' . Не заостряюсь на CSS - спойлер рабочий, раскрывающийся и цветной - всё ok! Вопрос в другом.

У меня такие имена определяет ф-ция на JavaScript и записывает их в переменную my_tag_id :
'd4df007b1f1ad3d64bd1f94b88ce49ae'
'bfc54aa099b4551c99fde6d769d5719a'........... и т.д.

Вопрос: как мне синтаксически модифицировать тег <div> чтобы в нём было не конкретное имя '1fddfa055d48476064dcd80f8815bdec' а переменная my_tag_id , определяющая это имя??
- Если представить тег так:
<div class="spoilertop" onClick="openClose( my_tag_id )" style="font-weight: bold">..........</div>
спойлер сразу перестаёт раскрываться.
- Если так:
<div class="spoilertop" onClick="openClose( 'my_tag_id' )" style="font-weight: bold">..........</div>
у спойлера просто будет имя 'my_tag_id' , а не 32х разрядное значение переменной, что мне нужно передать в процедуру openClose по клику мышки.

Помогите с вопросом, кто знает!
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38070659
ILLHEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фагот,

уверены, что в my_tag_id нужное значение, соответствующее дальнейшей логике?
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38070661
ILLHEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробовать потестить так
Код: html
1.
<div class="spoilertop" onClick="my_tag_id='1fddfa055d48476064dcd80f8815bdec';openClose(my_tag_id)" style="font-weight: bold">..........</div>
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38070667
Фагот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ILLHEAD ,
уверен, т.к. перед выводом спойлера на экран идёт сначала вывод значения переменной my_tag_id на экран же, я оттуде и взял для вас этот параноический пример:
'd4df007b1f1ad3d64bd1f94b88ce49ae'
'bfc54aa099b4551c99fde6d769d5719a'

Проблемв в том, что в качестве параметра процедура принимает и "Вася", и "bfc54aa099b4551c99fde6d769d5719a", и "111222"... Лишь бы это была строка взятая в кавычки, а вот ИМЯ переменной дашь - перестаёт работать. А мне надо переменную "привинтить", чтобы создавалось 5...10...15 спойлеров с такими случайными именам.
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38070676
Фагот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ILLHEADпопробовать потестить так
Код: html
1.
<div class="spoilertop" onClick="my_tag_id='1fddfa055d48476064dcd80f8815bdec';openClose(my_tag_id)" style="font-weight: bold">..........</div>



А в чём разница? всё равно: my_tag_id='1fddfa055d48476064dcd80f8815bdec' - переменной переменной my_tag_id присвоено конкретное имя. Вот как это у меня:

<script language="JavaScript" type="text/javascript">
var my_tag_id = '';
a_rand = "'" + Math.floor( Math.random() * 100 ) + "'";
my_tag_id = "'" + hex_md5(a_rand) + "'";
document.write(my_tag_id);
</script>

<div class="spoilertop" onClick="openClose(?????????????)" style="font-weight: bold">.....</div>
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38070717
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фагот
Код: javascript
1.
document.write(my_tag_id);

Надеюсь, это лишь для отладки?
ФаготВот как это у меня:В свою очередь — а в чем разница? Исходя из предоставленного скрипта, переменная my_tag_id присваивается единственный раз при загрузке страницы. Никакого отличия от того, как если бы значение было прописано в разметке.
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38070765
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы так что ли пытаетесь делать?
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
<script>
my_tag_id = "'" + hex_md5(a_rand) + "'";
</script>
<div class="spoilertop" onClick="openClose(my_tag_id)" style="font-weight: bold">.....</div>

<script>
my_tag_id = "'" + hex_md5(a_rand) + "'";
</script>
<div class="spoilertop" onClick="openClose(my_tag_id)" style="font-weight: bold">.....</div>

В момент клика переменная будет содержать последнее присвоенное значение.
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38070793
-spoiler-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторГлавное(!), каждый спойлер передаёт своё уникальное имя в процедуру openClose по которому она определяет какой из спойлеров надо закрыть/открыть по клику мыши. У меня это имя определяет переменная my_tag_id
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<script type="text/javascript">
            window.onload = function() {
                var spoilertop = document.getElementsByClassName('spoilertop');

                for(var i = 0, max = spoilertop.length; i < max; i += 1) {                   
                        spoilertop[i].onclick = function() {
                            var spoiler = this;
                            //логика по раскрытию\закрытию спойлера (spoiler)!!!
                        };                    
                };
            };
        </script>
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38070823
Фотография iConst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фагот...
Главное(!) , каждый спойлер передаёт своё уникальное имя в процедуру openClose по которому она определяет какой из спойлеров надо закрыть/открыть по клику мыши. У меня это имя определяет переменная my_tag_id
...А не проще передавать ссылку на див - openClose(this) ? Чем обусловлены гуиды?
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38070885
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тем, что открыть/спрятать нужно див, идентифицируемый гуидом, а не this.
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38070910
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из-за незнания js вы хотите странного, невозможного.
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38070932
Фагот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyИз-за незнания js вы хотите странного, невозможного.
А я в самом начале и написал:
ФаготЗдравствуйте!
Не спец. ни с HTML, ни с JavaScript, ни с CSS, поэтому вопрос возник!Форумы для того и существуют, чтобы если ты не знаешь, получить ответ знатоков. Если бы я знал JavaScript, стал бы а тут позориться такими вопросами. Просто, если задача нерешаема в принципе, так и напишите. Но я-то знаю, что она решаема - могу Вам дать ссылку на форум, посмотрите код в HTML.
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38070940
Фотография iConst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyТем, что открыть/спрятать нужно див, идентифицируемый гуидом, а не this.Ну, да - наискосок читал. :)
И все равно, при стабильной структуре проще передавать this и открывать первого (второго... десятого) потомка, чем заморачиваться с идентификаторами. С jQ это считанными строками делается... Да и нативно тоже не сложно.
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38070952
Фагот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iConstС jQ это считанными строками делается... Да и нативно тоже не сложно.
iConst , возможно то, о чём Вы пишите и есть то, что мне нужно. Если для Вас это не сложно, киньте код, организующий 3 независимых спойлера, 2 из которых один в одном (как на картинке, приведенной выше). Чтобы они все автономно открывались/закрывались. И... я нуб во всём этом, поэтому все подсказки типа "а это посмотри там, а это сделай так, как вон там" - для меня пустой звук. Я не смогу. А вот если вы сбросите небольшой рабочий код, который я адаптирую к себе, значит я не зря потратил время на форуме: и ваше, и своё разумеется...
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38071094
-spoiler-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
<!DOCTYPE html>
<html>
  <head>
    <title>Test Page</title> 	
	<script type="text/javascript">
        window.onload = function() {
            var spoilers = document.getElementsByClassName('spoiler');

            for(var i = 0, max = spoilers.length; i < max; i += 1) {   
                spoilers[i].getElementsByClassName('head')[0].onclick = function() {    
					var body = this.parentNode.getElementsByClassName('body')[0];
					body.style.display = (body.style.display == 'block') ? 'none' : 'block';					
                };                    
            };
        };
    </script>
	<style type="text/css">
		.spoiler {margin: 10px 0 10px 25px; width: 50%;}
		.spoiler .head {background-color: gray; color: white; cursor: pointer; padding: 5px;}
		.spoiler .body {display: none; border: solid 1px gray; padding: 10px;}
	</style>
  </head>
  <body>	
	<div class="spoiler">
		<div class="head">click me</div>
		<div class="body">
			aaaaaaaaa
			<div class="spoiler">
				<div class="head">click me</div>
				<div class="body">
				bbbbbbbbbb
				</div>
			</div>
		</div>
	</div>
	<div class="spoiler">
		<div class="head">click me</div>
		<div class="body">
		cccccccccccccc
		</div>
	</div>
  </body>
</html>


будешь должен!
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38071106
z-js
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фагот,

1. Найти все дивы с классом 'spoilertop'.
2. В цикле сгенерить хэши, присвоить id дивам и установить обработчик события 'onclick'

Примерный код:
Код: html
1.
2.
3.
4.
5.
<div class="spoilertop" style="font-weight: bold">..........</div> <!-- убрать onClick() и id -->
...
<div class="spoilertop" style="font-weight: bold">..........</div>
...
<div class="spoilertop" style="font-weight: bold">..........</div>


Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var spoilers = document.querySelectorAll("div.spoilertop");  // заменить на нужное имя класса
if (spoilers != null && spoilers.length>0)
{
   for (var i=0; i<spoilers.length; i++)
   {
      spoilers[i].id = my_hash_function();  // сюда хеш
      spoilers[i].onclick = function()
      {
         openClose(this.id);
      }
   }
}



p.s. только вот не понимаю, зачем такая возня с хешами, когда можно просто передать 'this'
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38071108
z-js
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-spoiler-,

Если правильно помню, getElementsByClassName в ослике не катит.
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38071124
-spoiler-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЕсли правильно помню, getElementsByClassName в ослике не катит.
должен же ТС проявить хоть какую-то инициативу?!
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38071125
-spoiler-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кстати, http://www.javascriptkit.com/dhtmltutors/css_selectors_api.shtml
авторOk, time for the obligatory reality check here- in terms of browser support, querySelector() and querySelectorAll() is supported in Firefox 3.1+, IE8+ (only in IE8 standards mode), and Safari 3.1+ .
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38071156
z-js
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-spoiler-кстати, http://www.javascriptkit.com/dhtmltutors/css_selectors_api.shtml
авторOk, time for the obligatory reality check here- in terms of browser support, querySelector() and querySelectorAll() is supported in Firefox 3.1+, IE8+ (only in IE8 standards mode), and Safari 3.1+ .
Это уже офтоп, но т.к. приведенная в качестве примера статья опубликована в далеком 2009 году, то должен констатировать, что многие приведенные там сведения уже устарели и отсутствие поддержки того или иного функционала в давно выживших браузерах не считаю (большой) проблемой.
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38071251
-spoiler-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторприведенная в качестве примера статья опубликована в далеком 2009 году, то должен констатировать, что многие приведенные там сведения уже устарели
с 2009 поддержка функционала появилась в версиях ниже указанных!? ;)
авторотсутствие поддержки того или иного функционала в давно выживших браузерах не считаю (большой) проблемой.
13600721 только что проверил в осле 9 - сухо! следуя твоей же логике, остальное доживает последние дни ;)

предлагаю, не точить клыки по напрасну, а оставить это задание ТС на сладкое
- самостоятельно найти кроссброузерный вариант выбора тэгов по имени класса...
остальную логику, без использования странных id , ему уже показали!
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38071434
Фагот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, спасибо большое всем за участие в тусне, которую я организовал с этими параноическими ID. Спасибо и spoiler 'у! Хватаю его манускрипты и тащу в норку разбираться. Очень надеюсь, что его выриант мне поможет.

Последний вопрос. В Visual FoxPro, которым я занимался одно время, есть понятие макроподстановок. Например, если я напишу:

а = "15 - 10"
b = "- 3"
то с = a + b - переменной c присвоится строковое значение "15 -10 - 3", т.е. произойдёт конкатенация 2-х строк.

Но если я напишу в программе макроподстановку:
d = &c - выполнится действие, в результате которого переменная d получит числовое значение 2 . Вот в чём разница.
В то время как d = с просто бы уравняло эти переменные.

Есть ли подобные выверты в JavaScript? Т.е. в некую пересенную Z записывается путём сцепления строк некая команда, а потом при обращении &Z - эта команда выполняется.
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38071438
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФаготЕсть ли подобные выверты в JavaScript? Т.е. в некую пересенную Z записывается путём сцепления строк некая команда, а потом при обращении &Z - эта команда выполняется.
Код: javascript
1.
2.
// функция eval()
document.write(eval("15 -10 - 3")); // == 2
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38071483
Фагот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ILL HEAD , спасибо! Чувствовал, что подобная заморочка обязательно должна быть в JavaScript.

Вот теперь уже точно в норку - разбираться! :0))) И спасибо ещё z-js , его скрипты я тоже уволок. Надеюсь, все эти мои "пляски с бубном" на форуме таки дадут результат...

Ещё раз всем спасибо!
...
Рейтинг: 0 / 0
Что-то типа макроподстановки в теге <div>
    #38071520
stopkran
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для таких простых визуальных действий, как скрыть-показать (или сделать зелёным), не нужны какие-то сложные идентификаторы элементов, не нужны циклы. Вообще не нужны сложные действия на javascript. Вся сложность здесь - в правильной структуре CSS - HTML.

Если у вас управляющий элемент (по которому кликаем) и скрытый элемент находятся в одном контейнере, надо просто по щелчку менять класс контейнера, а в CSS описать, что должен делать этот изменённый класс. Например, пусть у нас по умолчанию класс контейнера будет 'hidechild', который будет запрещать отображение элементов с классом 'body'. По щелчку на управляющем элементе 'head' мы просто будем убирать (или добавлять) этот класс 'hidechild' родительскому контейнеру. Вот вкратце и вся логика. Она немного усложнится, если мы хотим создавать вложенные друг в друга контейнеры.

Вот примерный код (результат - на http://ir2.ru/hidechild.html):
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
<!DOCTYPE html>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Скрыть-отобразить элемент по щелчку на соседнем элементе</title>
<style type="text/css">
	#catalog {width:900px; margin:2em auto;}
	h1 {text-align:center;}
	.item {min-width:230px; min-height:10em; border:1px solid #999; margin:1em; float:left;}
	.hidechild .body {display:none;}
	.showchild .body {display:inherit;}
	.showchild .hidechild .body {display:none;}
	.hidechild .showchild .body {display:inherit;}
	.showall .hidechild .body {display:inherit;}
	.body {height:5em; margin:1em; padding:1em; background-color:#fcf;}
	.head, #showallbutton {cursor:default; text-decoration:underline;}
</style>
<script type="text/javascript">
	window.onload = setCatalogWorkers;
	function setCatalogWorkers() {
		var c = document.getElementById('catalog');
		c.onclick = catalogWorker;
		c = document.getElementById('showallbutton');
		c.onclick = showAll;
	}
	function catalogWorker(e) {
		e = e || window.event
		var obj = e.target || e.srcElement;
		if (obj.className == 'head') {
			var pare = obj.parentNode;
			if (hasClass(pare.className, 'hidechild')) pare.className = 'item showchild';
			else pare.className = 'item hidechild';
		}
	}
	function hasClass(str, cl){
		str = ' ' + str + ' ';
		return (str.indexOf(' ' + cl + ' ') == -1) ? false : true;
	}
	function showAll(e, o){
		o = o || this
		var pare = o.parentNode;
		if (hasClass(pare.className, 'showall')) pare.className = '';
		else pare.className = 'showall';
	}
</script>
<h1>Скрыть-отобразить элемент по щелчку на соседнем элементе</h1>
<div id="catalog">
	<h3 id="showallbutton">Показать все элементы</h3>
	<div class="item hidechild">
		<div class="head">click me</div>
		<div class="body">cennyi kadr 1 vidim</div>
	</div>

	<div class="item hidechild">
		<div class="head">click me</div>
		<div class="body">cennyi kadr 2 vidim</div>
	</div>

	<div class="item hidechild">
		<div class="head">click me</div>
		<div class="body">cennyi kadr 3 vidim</div>
		<div class="item hidechild">
			<div class="head">click me</div>
			<div class="body">cennyi kadr 3.1 vidim</div>
		</div>
	</div>
</div>
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Что-то типа макроподстановки в теге <div>
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]