|
|
|
|
|
для: Владимир22
(24.01.2007 в 00:41)
| | Часть ключевого кода я уже описал, это генерация скрипта "ПХП" идентификаторов для ссылки и для слоя(<div>).
Пусть айдишник для ссылки = "12345", а константа для слоя = "d";
Тогда:
<div id="d12345">...<a id="12345" href="url" onclick="func(this.id)" >url</a>...</div>
|
Скрипт, который будет обрабатывать любой id:
<script type="text/javascript">
<!--
function func(elemID) {
// получаем id ссылки и => прибавля константу имеем id слоя:
var divElemID = "d" + elemID;
var Elem = document.getElementById(divElemID);
// всё, дальше можно обращаться к слою при помощи переменной Elem и проводить с ним различные действия.
...
}
//-->
</script>
|
Этот скрипт работает при нажатии на ссылку, когда событие "онклик" передаёт скрипту айдишник. Скрипт работает в фаирфоксе, опере и ие. У меня используется для скрытий/отображений слоёв с почти случайными айдишниками на странице.
Достаточно его прикрепить к странице, например между <head></head>.
А на ПХП, в цикле теперь можно выводить только элемент див и ссылку внутри него:
<?
for($i=0;$i<100;$i++) {
// . . .
echo "<div id=\"d".($i+1)."\"><a id=\"".($i+1)."\" href=\"$url\" onclick=\"func(this.id)\">$url</a></div>";
// . . .
}
?>
|
Вся сложность в том , что функция в скрипте выполняет несколько действий с несколькими Id разных блоков одного номера в цикле.
Вот это у меня сейчас стои в цикле и всё работает (но слишком много кода, а всё просто повторяется под разными номерами цикла)
Для решения этой проблемы в javascript -е вводишь дополнительные переменные по такому же образцу, только тогда, тебе надо будет прописывать вместо одной константы, четыре или больше.
То есть, например - divElemID1, divElemID2, divElemID3, divElemID4. С разными начальными(конечными) константами: "d", "e", "f", "g".
. | |
|
|
|
|
|
|
|
для: Владимир22
(24.01.2007 в 00:41)
| |
<script>
window.onload = function(){
d = document;
contentElem = d.getElementById('contayner')
k=0;
for(i=0; i<contentElem.childNodes.length; i++){
if(contentElem.childNodes[i].nodeType==1){
//предыдущими действиями мы выбрали только теги, далее выбираем необходимый
if(contentElem.childNodes[i].id=="a"+k){
//делаем то, что неоходимо с выбраным элементом
d.getElementById('a'+k).style.display = "none";
}
k++;
}
}
}
</script>
<div id="contayner">
<?php
for($j=0; $j<количства_выводимых_записей_в_бд; $j++){
echo "<div id=\"a".$j."\">my div".$j."</div>";
}
?>
</div>
|
| |
|
|
|
|
|
|
|
для: retsoul
(23.01.2007 в 02:52)
| | Что-то не могу разобраться, что и куда вставлять.
Вся сложность в том , что функция в скрипте выполняет несколько действий с несколькими Id разных блоков одного номера в цикле.
Вот это у меня сейчас стои в цикле и всё работает (но слишком много кода, а всё просто повторяется под разными номерами цикла)
<SCRIPT language=JavaScript>
function Disp_<?=$i+1?>() {
ma=document.getElementById("<?=$i+1?>");
ma1=document.getElementById("s<?=$i+1?>");
ma2=document.getElementById("r<?=$i+1?>");
ma3=document.getElementById("g<?=$i+1?>");
ma.style.display="block";
ma1.style.display="none";
ma2.style.color="#D20000";
ma3.style.color="#D20000";
}
</SCRIPT>
| Как всё таки можно вывести это скрипт из цикла и передать номер каждой выводимой записи из бызы в этот скрипт для выполнения действий в пределах только этой - каждой конкретной записи? | |
|
|
|
|
|
|
|
для: Владимир22
(22.01.2007 в 17:42)
| | Есть ещё одно интересное решение:
В цикле я вижу у тебя есть ссылка, с нажатием на которую вызывается функция.
Идея в том, что можно генерировать случайный id этой ссылки, а id элемента "дива" будет равен какой-нибудь константе + id ссылки, то есть:
<div id="d12345"><a id="12345" href="url" onClick="func(this.id)">url</a></div>
|
и при нажатие на ссылку в вызываемую функцию будет передоваться id ссылки, прибавляя к константе полученный идентификатор у нас получается "айди дива" с которым уже можно теперь обращаться.
Соответственно уже не нужно держать скрипт с функцией в цикле. | |
|
|
|
|
|
|
|
для: Владимир22
(22.01.2007 в 17:42)
| | во-первых ид должен стартовать с буквы div id как <?="а".$i+1?>
во-вторых скрипт выносится в тег <head>
<head>
...
<script src="myscript.js"></script>
</head>
|
и примерно такой код
d = document;
contentElem = d.getElementById('идентификатор_блока, в который выводятся записи из бд')
k=0;
for(i=0; i<contentElem.childNodes.length; i++){
if(contentElem.childNodes[i].nodeType==1){
//предыдущими действиями мы выбрали только теги, далее выбираем необходимый
if(contentElem.childNodes[i].id=="a"+k){
//делаем то, что неоходимо с выбраным элементом
}
k++;
}
}
|
| |
|
|
|
|
|
|
| Есть такая проблема:
в цикле выводятся записи базы, и в этом же цикле каждая запись (помечена в div id как <?=$i+1?> работает с джава-скриптом. При выводе страницы получается много кода - каждая запись идёт с одинаковым большим скриптом(только номер разный).
Можно ли как-то вынести это скрипт за цикл и передавать ему только номер для исполнения в каждой записи?
Упрощённый пример кода для понимания:
<?
$res=mysql_query("select * from list order by 'date' desc");
for($i=0;$i<100;$i++){
$url=mysql_result($res, $i, 'url');
echo "<div id=$i+1><a href='$url' onClick="Dis$i+1();">$url</a></div>
<SCRIPT language=JavaScript>
function Dis<?=$i+1?>() {
ma=document.getElementById("<?=$i+1?>");
и т.д. много всего....
}
</SCRIPT>";
}
?>
|
| |
|
|
|
|