Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Получить элементы внутри блока по порядку и присвоить свое значение (https://javascript.ru/forum/dom-window/70834-poluchit-ehlementy-vnutri-bloka-po-poryadku-i-prisvoit-svoe-znachenie.html)

Янковиц 05.10.2017 19:21

Получить элементы внутри блока по порядку и присвоить свое значение
 
Добрый день. Есть следующий кусок html:
<div class="task-list">
	<div id="task-1" class="task" data-name="category">
		<p>Категории</p>
		<a href="#" class="icon-pencil">✎</a>
	</div>
	<div id="task-2" class="task" data-name="size">
		<p>Размер</p>
		<a href="#" class="icon-pencil">✎</a>
	</div>
	<div id="task-3" class="task" data-name="color">
		<p>Цвет</p>
		<a href="#" class="icon-pencil">✎</a>
	</div>
	<div id="task-4" class="task" data-name="brend">
		<p>Производитель</p>
		<a href="#" class="icon-pencil">✎</a>
	</div>
</div>


Как последовательно получить data-name всех дивов внутри task-list и присвоить им значения? Например, должно получиться:
category:10,size:20,color:30,brend:40
Спасибо

laimas 05.10.2017 19:38

$(function() {
    $('[data-name]').each(function() {
        var attr = this.getAttribute('data-name') + ':30';
        this.setAttribute('data-name', attr)
    });
});

Янковиц 05.10.2017 19:43

Спасибо. Правда, я наверно не очень правильно выразил мысль. Мне нужно не изменить data-name, а просто, получить весь список и передать в переменную. В итоге моя переменная на выходе должна содержать category:10,size:20,color:30,brend:40 Чтобы потом обработать через ajax, или есть более элегантное решение?

Rasy 05.10.2017 19:45

Янковиц,
Некоторые спешат, невнимательно читают условие... Вот верный вариант. :)

$('[data-name]').attr('data-name', function(i, v) {
   return v+=':'+(++i*10);
});

Янковиц 05.10.2017 19:49

Не совсем понял как загнать в переменную... Простите, мозк не соображает, а работу делать надо ;)

laimas 05.10.2017 19:49

Цитата:

Сообщение от Янковиц
В итоге моя переменная на выходе должна содержать category:10,size:20,color:30,brend:40

Все понятно вы пишите, только не поясняете зависимости 10, 20, ... со значением атрибутов, что догадываться изволите?

Rasy 05.10.2017 19:50

Цитата:

Сообщение от Янковиц
В итоге моя переменная на выходе должна содержать category:10,size:20,color:30,brend:40 Чтобы потом обработать через ajax, или есть более элегантное решение?

Тогда, да
var str = $('[data-name]').attr('data-name', function(i, v) {
   return v+=':'+(++i*10);
}).map(function(indx, el) {
  return $(el).data('name');
}).get().join(',');

Янковиц 05.10.2017 19:53

Цитата:

Сообщение от laimas (Сообщение 466669)
Все понятно вы пишите, только не поясняете зависимости 10, 20, ... со значением атрибутов, что догадываться изволите?

Простите.. Если первый div, то data-name присвоить 10, если второй, то 20 и так далее. Заведомо не известно, див с каким data-name будет первым, а какой последующий не известно...

Янковиц 05.10.2017 19:54

var str = $('[data-name]').attr('data-name', function(i, v) {
   return v+=':'+(++i*10);
}).map(function(indx, el) {
  return $(el).data('name');
}).get().join(',');


Не совсем понимаю, где здесь переменная

Rasy 05.10.2017 19:55

Янковиц,
снизу - alert(str);


Часовой пояс GMT +3, время: 16:47.