Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > рандом


Автор: chertoss 3.9.2008, 20:38
здравствуйте, возникла такая проблема, у меня выводятся в цикле строки таблицы

Код

<tr>
    <td>текст</td>
    <td>картинка</td>
</tr>

 соответственно если это цикл, то строк может быть сколько угодно много, как можно выводить эти строки в рандомном порядке?

например так

Код

<tr>
    <td>текст 1</td>
    <td>картинка 1</td>
</tr>
<tr>
    <td>текст 7</td>
    <td>картинка 7</td>
</tr>
<tr>
    <td>текст 4</td>
    <td>картинка 4</td>
</tr>
<tr>
    <td>текст 2</td>
    <td>картинка 2</td>
</tr>

Автор: bars80080 3.9.2008, 20:49
собрать случайную последовательность, что-то вроде такого
Код

var kol = 10
var max = 3;
var t = new Array();
var flag;

i = 0;
while(i < max) {
var c = Math.round(kol*Math.random());
flag = true;
len = t.length;
for(j = 0; j < len; j++) {
if(t[j] == c) { flag = false; i++; }
}
if(flag) t[len] = c;
}


а затем прокрутить её в цикле и вывести строки по этой последовательности

Автор: chertoss 3.9.2008, 20:53
не совсем понятно, можно ли более подробно или с коментами?

Автор: bars80080 3.9.2008, 21:02
не проверял, так сляпал:
Код

var kol = 10; // количество строчек
var max = 3; // сколько надо вывести
var t = new Array(); // массив случайной последовательности
var flag;

i = 0;
while(i < max) { 
var c = Math.round(kol*Math.random()); // случайное число от 0 до kol
flag = true;
len = t.length; 
for(j = 0; j < len; j++) { // перебираем массив t и ищем в нём это число, 
if(t[j] == c) { flag = false; i++; } // если найдём, то записывать не будем. зачем нам повторения в массиве случайных чисел?
}
if(flag) t[len] = c; // не нашли - запишем
}

// дальше цикл вывода:
for(i = 0; i < t.length; i++) {
// печатаем строчку в которую подствляем число t[i]
}

Автор: chertoss 3.9.2008, 21:11
эх, неудобен такой способ.. можно ли как то иначе? скажем брать id самой таблицы, как нить сделать коллекцию тегов tr, потом запихать их в массив и пересортировать в случайном порядке? ну как нибудь так.. 

Автор: bars80080 3.9.2008, 21:17
а какая разница? или я что-то другое написал?

Автор: chertoss 3.9.2008, 21:23
ну я не знаю например, сколько строк у меня будет

Автор: bars80080 3.9.2008, 21:27
ну, так вначале насобирай массив этих строк, затем
kol = massiv.length;
max = kol;
и всё

Автор: chertoss 3.9.2008, 21:29
так у меня в этом как раз весь ступор и есть, чета не не соображу никак как мне массив строк собрать.. туплю :(

Автор: bars80080 3.9.2008, 21:54
а как ты их тогда выводишь?

Автор: chertoss 3.9.2008, 22:20
вот так

есть хмл
Код

<root>
    <item name="item1">
        <param name="name">контора 1</param>
        <param name="logo">http://img13.nnm.ru/imagez/gallery/2/5/1/f/b/251fb647deafeb82fb595cbf13dfa3c3_full.jpg</param>
    </item>
    <item name="item2">
        <param name="name">контора 2</param>
        <param name="logo">http://img12.nnm.ru/imagez/gallery/e/e/4/4/9/ee449b84776fcd767e0447dbf61cae6a_full.jpg</param>
    </item>
    <item name="item3">
        <param name="name">контора 3</param>
        <param name="logo">http://img11.nnm.ru/imagez/gallery/6/b/6/c/5/6b6c5a07198809e8277274a3486314ee_full.jpg</param>
    </item>
</root>



пишу к нему хсл
Код

<xsl:template match="root">
<html>
    <head>
        <title></title>
    </head>
    <body>

        <table id="table">
            <tbody>
            
            <xsl:for-each select="item">
                <tr>
                    <td><xsl:value-of select="param[@name = 'name']"/></td>
                    <td><img alt="" src="{param[@name = 'logo']}" height="50" /></td>
                </tr>
            </xsl:for-each>
            
            </tbody>
        </table>
        
    </body>
</html>
</xsl:template>



Автор: bars80080 3.9.2008, 23:36
бо, тут я не помошник

Автор: chertoss 4.9.2008, 07:35
да я не прошу вникать в суть xsl, на выходе все равно HTML получается, вот я и спрашиваю, как собрать все TR у TABLE ID="table" в массив?

Автор: SelenIT 5.9.2008, 00:25
А исходный XML нельзя перемешать? На крайний случай - отсортировать в XSL по чему-нибудь вроде substring(param[@name = 'logo'],46,32), на первый взгляд получится вполне бессистемный порядок...

Автор: chertoss 5.9.2008, 08:01
всем спасибо, проблему уже решил!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)