У меня есть 25 элементов на этой странице:

<div id="test1"></div>
<div id="test2"></div>
<div id="test3"></div>
<div id="test4"></div>
<div id="test5"></div>

Также у меня есть код для обновления HTML в divs:

setInterval(function() {

  $.post("./main/", {
    record:1,
    opt:'get_res'
  }, function(data){
    $test1=data;
  });

}, 15000);

Чтобы изменить HTML во всех блоках, мне нужно запустить этот код 5 раз, например:

setInterval(function() {

  $.post("./main/", {
    record:1,
    opt:'get_res'
  }, function(data){
    $test1=data;
  });

}, 15000);

setInterval(function() {

  $.post("./main/", {
    record:2,
    opt:'get_res'
  }, function(data){
    $test2=data;
  });

}, 15000);

.....
.....

setInterval(function() {

  $.post("./main/", {
    record:3,
    opt:'get_res'
  }, function(data){
    $test3=data;
  });

}, 15000);

Например, для 25 элементов div нужно написать этот код 25 раз - это будет очень большой код.

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

0
Leo Loki 29 Янв 2013 в 19:02

3 ответа

Лучший ответ

Просто переберите элементы, используйте индекс или извлеките число из идентификатора и сохраните в массиве или объекте все, что подходит лучше всего:

var test = {};
setInterval(function() {
    $('div[id^="test"]').each(function(i, ele) {
        (function(idx) {
            $.post("./main/", {
                record: idx,
                opt:'get_res'
            }, function(data){
                test[idx] = data;
            });
        })(i+1);
    });
}, 15000);
2
adeneo 29 Янв 2013 в 15:56

Вам следует взглянуть на http://api.jquery.com/each/ функцию:

Обновление : в основном вы можете использовать любой селектор, чтобы найти свои элементы

Предположим, у вас есть простой неупорядоченный список на странице:

<ul>
    <li>foo</li>
    <li>bar</li>
    <li class="findMe">foo2</li>
    <li class="findMe">bar2</li>
</ul>

Вы можете выбрать элементы списка и перебрать их:

$( ".findMe" ).each(function( index ) {
  //do something ... post or anything else
});
4
Shlomi Schwartz 30 Янв 2013 в 08:34

Что вы можете сделать, вы можете сделать тест в виде массива и использовать этот код

 for (i = 1 , i<=25 , i++)
  $.post("./main/", {
  record:i,
  opt:'get_res'
  }, function(data){
  $test[i]=data;
  });

  }, 15000);
0
Rohit Agrawal 29 Янв 2013 в 15:07