[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: не получается посчитать массив обьектов HTML
qpayct
у меня на форме есть лист, который создаётся динамично(в зависимости от колличества записей в БД). на каждую строку задаётся id
<li id="lmenu[<?=$i?>]" onclick="markMe(this.id)"><?=$name[$i]?></li>
<li
id="lmenu[<?=$i?>]" onclick="markMe(this.id)"><?=$name[$i]?></li>
<li
id="lmenu[<?=$i?>]" onclick="markMe(this.id)"><?=$name[$i]?></li>

и т.п.

в функции markMe() мне надо перебрать подряд весь массив обьектов lmenu.

пробую вот так
function markMe(id) {
var str = id.substr(0, id.indexOf('['));
var objs = document.getElementById(str);
alert(objs.count());
}

так
function markMe(id) {
var str = id.substr(0, id.indexOf('['));
var objs = document.getElementById(str + '[]');
alert(objs.count());
}

и так
function markMe(id) {
alert(id.count());
}

как это сделать?



Спустя 12 минут, 38 секунд (9.03.2010 - 15:41) qpayct написал(а):
попробывал задать по другому и всёравно не получилось....
<li id="lmenu[]" onclick="markMe(this.id)"><?=$name[$i]?></li>
<li
id="lmenu[]" onclick="markMe(this.id)"><?=$name[$i]?></li>
<li
id="lmenu[]" onclick="markMe(this.id)"><?=$name[$i]?></li>

function markMe(id) {
alert(id.count());
}

Спустя 1 минута, 27 секунд (9.03.2010 - 15:42) waldicom написал(а):
Разве id не должен быть уникальным во всем документе?

Спустя 3 минуты, 5 секунд (9.03.2010 - 15:45) qpayct написал(а):
конечно, но этож массив - проиндексированые обьекты html тоже можно перебирать.... как пример - checkbox и radio...

Спустя 8 минут, 37 секунд (9.03.2010 - 15:54) sergeiss написал(а):
qpayct - держи, "от сердца отрываю!" smile.gif

function set_checked_values( obj, to_set ) // установить значения параметров в наборе чек-боксов
{
var checks = document.getElementsByName( obj );
var length = checks.length;
if(checks&&length)
{
for(var i=0;i<length;i++) checks[i].checked=to_set;
}
}


function count_selected_values( obj ) // подсчитать количество выбранных параметров в указанном списке
{
var opts=document.getElementById( obj );
var i;
var c=0;
for( i=0; i<opts.options.length; i++)
{
if( opts.options[i].selected ) c++;
}
return c;
}

function set_select_values( obj, to_set ) // установить значение для всех параметров в указанном списке
{
var opts=document.getElementById( obj );
var i;
for( i=0; i<opts.options.length; i++)
{
opts.options[i].selected=to_set;
}
}



На 100% рабочие функции. Адаптируй под свои нужды.

Спустя 17 минут, 34 секунды (9.03.2010 - 16:11) qpayct написал(а):
sergeiss
О! спасибо огромное,
как раз по совету waldicom начал допирать, что считать их надо по name, а не по id user posted image
однако неудобство получается нереальное, поскольку послать в функцию markMe(this.name) не получается... говорит undefined sad.gif

Спустя 16 минут, 37 секунд (9.03.2010 - 16:28) Michael написал(а):
<ul>
<li
id="lmenu[]" onclick="markMe(this)">111111111</li>
<li
id="lmenu[]" onclick="markMe(this)">22222222</li>
<li
id="lmenu[]" onclick="markMe(this)">3333333333</li>
</ul>


function markMe(obj) {
var spis = obj.parentNode.getElementsByTagName('li');
alert(spis.length); // 3
var s = '';
for (var i=0; i < spis.length; i++)
{
s += spis[i].innerHTML + "\n";
}
alert(s);

}

Спустя 33 минуты, 50 секунд (9.03.2010 - 17:02) qpayct написал(а):
Michael
интересное решение, но опять есть проблема:
я задаю name/id только основному(внешнему) списку, а внутренние не должны считаться и имеют другие name/id, при этом при нажатии на внутренние мне выдаёт id внешнего, к которому отностися этот внутренний. нужно мне всё это для того, чтобы при нажатии на внешние/внутренние ячейки класс стилей менялся у внешних(hmenu на mhmenu).
вот как это организоватьть?
li.hmenu, li.mhmenu {
margin: 0 6px 0 0;
padding: 2px 0 2px 0;
border: solid 1px #E8E8E8;
-moz-border-radius: 8px 8px 1px 1px;
-webkit-border-radius: 8px 8px 1px 1px; /* safari 3 */
-khtml-border-radius: 8px 8px 1px 1px; /* Konqueror */
}
li.mhmenu {
background-color: #F7F7F7;
}

function markMe(id) {
alert(id);
}

<ul id="menu">
<li
id="lmenu[0]" onclick="markMe(this.id);" class="hmenu"><a href="?p=0">Home</a></li>
<li
id="lmenu[1]" onclick="markMe(this.id);" class="hmenu"><a href="?p=1">Products</a></li>
<li
id="lmenu[2]" onclick="markMe(this.id);" class="hmenu"><a href="?p=2">Projects</a>
<ul
class="in-menu">
<li><a
href="?p=8">Project 1</a></li>
<li><a
href="?p=9">Project 2</a></li>
<li><a
href="?p=10">Project 3</a></li>
<li><a
href="?p=11">Project 4</a></li>
<li><a
href="?p=12">Project 5</a></li>
<li><a
href="?p=13">Project 6</a></li>
<li><a
href="?p=14">Project 7</a></li>
<li><a
href="?p=15">Project 8</a></li>
<li><a
href="?p=16">Project 9</a></li>
</ul>
</li>
<li
id="lmenu[3]" onclick="markMe(this.id);" class="hmenu"><a href="?p=3">Forum</a></li>
<li
id="lmenu[4]" onclick="markMe(this.id);" class="hmenu"><a href="?p=4">Links</a></li>
<li
id="lmenu[5]" onclick="markMe(this.id);" class="hmenu"><a href="?p=5">Help</a>
<ul
class="in-menu">
<li><a
href="?p=6">FAQ</a></li>
<li><a
href="?p=7">Contacts</a></li>
</ul>
</li>
</ul>

Спустя 26 минут, 4 секунды (9.03.2010 - 17:28) qpayct написал(а):
короче вот, как я сделал , а результат хреновый smile.gif
где ошибка??
<li id="lmenu[2]" name="lmenu[]" class="hmenu" onclick="markMe(this.id, 'lmenu[]');">

function markMe(id, ima) {
var obj = document.getElementsByName(ima);
for (var i=0; i<obj.length; i++) {
obj[i].className = 'hmenu';
}
document.getElementById(id).className = 'mhmenu';
}

Спустя 32 минуты, 4 секунды (9.03.2010 - 18:00) Michael написал(а):
Ох, ты объясняешь.
В общем при нажатии на пункт главного списка или одного из его детей его класс меняется на mhmenu, а всех его соседей ( "неактивных") на hmenu ?

Спустя 36 минут, 16 секунд (9.03.2010 - 18:36) Michael написал(а):
Не делай так много атрибутов в тегах - это не правильно. Передавай в обработчик ссылку на источник - this. Вот код: щелкнули по элементу, у него класс изменился на mhmenu, а у его братьев/сестер на hmenu.
function markMe(obj) {
var spis = obj.parentNode.childNodes;
for (var i=0; i < spis.length; i++)
{
if ((spis[i].nodeType == 1) &&
(
spis[i] != obj)) spis[i].className = 'hmenu';
}
obj.className = 'mhmenu';
}

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

Спустя 5 минут, 58 секунд (9.03.2010 - 18:42) qpayct написал(а):
Michael да. спасибо. слушай, круто ты манипулируешь javascript и DOM в целом huh.gif
главное ты так и не понял кажется. допустим вот список, внутри которого ещё 2 списка :под ячейкой Projects и Help. Так вот допустим я нажал на Project 3(?p=10), а класс должен поменятся у Projects(?p=2)
<ul id="menu">
<li
class="hmenu"><a href="?p=0">Home</a></li>
<li
class="hmenu"><a href="?p=1">Products</a></li>
<li
class="hmenu"><a href="?p=2">Projects</a>
<ul
class="in-menu">
<li
class="hmenu-inn"><a href="?p=8"> Project 1</a></li>
<li
class="hmenu-inn"><a href="?p=9"> Project 2</a></li>
<li
class="hmenu-inn"><a href="?p=10"> Project 3</a></li>
<li
class="hmenu-inn"><a href="?p=11"> Project 4</a></li>
<li
class="hmenu-inn"><a href="?p=12"> Project 5</a></li>
<li
class="hmenu-inn"><a href="?p=13"> Project 6</a></li>
<li
class="hmenu-inn"><a href="?p=14"> Project 7</a></li>
<li
class="hmenu-inn"><a href="?p=15"> Project 8</a></li>
<li
class="hmenu-inn"><a href="?p=16"> Project 9</a></li>
</ul>
</li>
<li
class="hmenu"><a href="?p=3">Forum</a></li>
<li
class="hmenu"><a href="?p=4">Links</a></li>
<li
class="hmenu"><a href="?p=5">Help</a>
<ul
class="in-menu">
<li
class="hmenu-inn"><a href="?p=6">FAQ</a></li>
<li
class="hmenu-inn"><a href="?p=7">Contacts</a></li>
</ul>
</li>
</ul>

Цитата (Michael @ 9.03.2010 - 17:36)
Кстати, может еще из-за этого недопонимание: при щелчке по ссылкам страница перезагружается и настройки естественно сбрасываются.

это да smile.gif я даунил долго пока не понял наконец smile.gif я просто пока что делаю без AJAX, но потом буду внедрять его

Спустя 13 минут, 41 секунда (9.03.2010 - 18:56) Michael написал(а):
Так что решено?

В случае, что при нажатии на вложенный список класс меняется у ссылки сверху, так алгоритм тот же: находится родитель (он общий у них), и ссылка находится: родитель.getElementsByTagName('a')[0].

Спустя 4 минуты, 48 секунд (9.03.2010 - 19:01) qpayct написал(а):
красава! да.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.