0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 13
1

Установить значения из массива дочерним элементам

20.01.2016, 18:58. Показов 1266. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня есть html код:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div class="at-repater-block">
<input type='radio' class='at-radio' name='re_widget[0][set_style_for_widget]' value='topbanner' />
<span class='at-radio-label'>topbanner</span>
<input type='radio' class='at-radio' name='re_widget[0][set_style_for_widget]' value='undermenu' />
<span class='at-radio-label'>undermenu</span>
<input type='radio' class='at-radio' name='re_widget[0][set_style_for_widget]' value='topstring' />
<span class='at-radio-label'>topstring</span>
</div>
<div class="at-repater-block">
<input type='radio' class='at-radio' name='re_widget[1][set_style_for_widget]' value='topbanner' />
<span class='at-radio-label'>topbanner</span>
<input type='radio' class='at-radio' name='re_widget[1][set_style_for_widget]' value='undermenu' />
<span class='at-radio-label'>undermenu</span>
<input type='radio' class='at-radio' name='re_widget[1][set_style_for_widget]' value='topstring' />
<span class='at-radio-label'>topstring</span>
</div>
И есть jquery код:

Javascript
1
2
3
4
5
6
7
jQuery(document).ready(function(){
var fruit = ["111", "222", "333"];
fruit.forEach(function(value,i){
var label = $(".at-radio-label")[i];
$(label).text(value);
});
});
Он работает, но только для дочерних элементов первого родителя (.at-repater-block) , заменяя текст в элементах с классом .at-radio-label на элементы массива fruit . Как распространить это и на дочерние элементы других родителей? Чтобы получилось так:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div class="at-repater-block">
<input type='radio' class='at-radio' name='re_widget[0][set_style_for_widget]' value='topbanner' />
<span class='at-radio-label'>111</span>
<input type='radio' class='at-radio' name='re_widget[0][set_style_for_widget]' value='undermenu' />
<span class='at-radio-label'>222</span>
<input type='radio' class='at-radio' name='re_widget[0][set_style_for_widget]' value='topstring' />
<span class='at-radio-label'>333</span>
</div>
<div class="at-repater-block">
<input type='radio' class='at-radio' name='re_widget[1][set_style_for_widget]' value='topbanner' />
<span class='at-radio-label'>111</span>
<input type='radio' class='at-radio' name='re_widget[1][set_style_for_widget]' value='undermenu' />
<span class='at-radio-label'>222</span>
<input type='radio' class='at-radio' name='re_widget[1][set_style_for_widget]' value='topstring' />
<span class='at-radio-label'>333</span>
</div>
Демо: https://jsfiddle.net/uqzLomvj/
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2016, 18:58
Ответы с готовыми решениями:

Обратиться к дочерним элементам this
Добрый день. Как в jQuery обращаются к к дочерним элементам this? Пусть, например, this - это...

Обращение к дочерним элементам
Доброго времени суток господа. Помогите разобраться. Есть несколько элементов HTML &lt;div...

Применение стилей к дочерним элементам
Доброго дня! Я новичок в JQuery, как и в JS. По мере освоения материала возникла трудность. ...

Обращение к дочерним элементам treeview
Добрый день! подскажите, как я могу обратиться к дочернему элементу выделенного узла в treeview?

8
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
20.01.2016, 20:47 2
Лучший ответ Сообщение было отмечено lev1988 как решение

Решение

Javascript
1
2
3
4
5
6
7
8
$(document).ready(function() {
  var fruit = ["111", "222", "333"];
  $('.at-repater-block').each(function(i, block) {
    $('.at-radio-label', block).each(function(i, label) {
      $(label).text(fruit[i]);
    });
  });
});
1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 13
20.01.2016, 21:36  [ТС] 3
Спасибо. Работает.

Добавлено через 19 минут
И еще вопрос. Как можно запустить этот скрипт повторно при добавлении на страницу еще одного такого же родительского элемента с набором дочерних. Добавление происходит при нажатии тега img с идентификатором #add-re_widget
0
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
20.01.2016, 22:15 4
Цитата Сообщение от lev1988 Посмотреть сообщение
Как можно запустить этот скрипт повторно
Код обернуть в функцию, которую запускать когда потребуется.

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$(function(){
    replaceLabel(); // запустить после загрузки DOM
    $('button').on('click', replaceLabel); // запустится по нажатию на кнопку
    // и т.д.
});
 
function replaceLabel() {
  var fruit = ["111", "222", "333"];
  $('.at-repater-block').each(function(i, block) {
    $('.at-radio-label', block).each(function(i, label) {
      $(label).text(fruit[i]);
    });
  });
}
1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 13
21.01.2016, 11:10  [ТС] 5
Цитата Сообщение от Lazy_Den Посмотреть сообщение
$(function(){ replaceLabel();
$('button').on('click', replaceLabel);
});
Эту часть прописал так:
Javascript
1
2
3
4
5
6
7
8
jQuery(document).ready(function(){
replaceLabel();
$("#add-re_widget").click(function() {
interval(function(){
replaceLabel();
 });
});
});
Функцию interval взял отсюда: http://www.thecodeship.com/web... tinterval/
$('button').on('click', replaceLabel); не сработал - возможно, надо запускать функцию через некое время после события click .
0
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
21.01.2016, 11:39 6
lev1988, я не понимаю, зачем вам какой-то интервал, но вам, конечно же, видней. Однако, если взять ваш код, функцию interval(), код, который мы разбирали и сложить всё вместе, то проблем я не наблюдаю. Проверяем в песочнице
JS
Javascript
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
$(function() {
  //replaceLabel();
  $("#add-re_widget").click(function() {
    interval(function() {
      replaceLabel();
    });
  });
});
 
function replaceLabel() {
  var fruit = ["111", "222", "333"];
  $('.at-repater-block').each(function(i, block) {
    $('.at-radio-label', block).each(function(i, label) {
      $(label).text(fruit[i]);
    });
  });
}
 
function interval(func, wait, times) {
  var interv = function(w, t) {
    return function() {
      if (typeof t === "undefined" || t-- > 0) {
        setTimeout(interv, w);
        try {
          func.call(null);
        } catch (e) {
          t = 0;
          throw e.toString();
        }
      }
    };
  }(wait, times);
 
  setTimeout(interv, wait);
};
0
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 13
21.01.2016, 11:51  [ТС] 7
Возможно, я несколько неразборчиво написал второе сообщение. В админке (у меня) есть несколько блоков. При нажатии на кнопку добавляется блок. Можно и еще добавить, и еще. На Вашей демо странице при нажатии на кнопку не происходит добавление элементов. Там происходит работа в уже существующих блоках.
Близкий пример того, что у меня: появление нового блока при нажатии кнопки "Add a field" на демо странице http://jsfiddle.net/qBURS/2/
0
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
21.01.2016, 12:36 8
lev1988, так вы хотите запускать функцию после добавления нового блока? Даже без лишних манипуляций будет работать, но для перестраховки, можно сделать задержку в пару миллисекунд. Смотрим.
Javascript
1
setTimeout(replaceLabel, 5); // и без всяких сторонних функций
1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 13
21.01.2016, 12:42  [ТС] 9
Да. Спасибо. setTimeout отработал как надо.
0
21.01.2016, 12:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.01.2016, 12:42
Помогаю со студенческими работами здесь

opacity передается дочерним элементам
Подскажите пожалуйста, как сделать чтобы непрозрачность не передавалась дочерним элементам блока....

Доступ к дочерним элементам скопированного элемента
Скоировал div, в котором есть элемент(ы). var...

Как из дива обращатся к дочерним элементам?
Есть контейнер1, в котором два разных элемента (не обязательно див) Как сделать так чтобы при...

Применение стиля к дочерним элементам в XAML
Имеется DockPanel и в ней Image. делаю стиль. Сначала прописываю свойства для самой панели - все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru