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)

laimas 05.10.2017 19:55

Rasy,
очень внимательно читаете, но как гончая ... Зачем же один цикл на изменение, затем второй на объединение, если можно сразу к коллекции $.map($('[data-name]'), function(...).join(',')? И .get() здесь и нафик не нужен.

Rasy 05.10.2017 20:02

laimas,
С утилитой map лучше, но автор сразу не правильно сформулировал задачу и такой вариант не кто не смог бы родить.

laimas 05.10.2017 20:03

Янковиц,
если 10 и прочее к действительно к индексу привязано, а на выходе строка, то все намного проще, чем советуют:

var s = $.map($('[data-name]'), function(e, i) {
        return e.getAttribute('data-name') + ':' + ++i * 10
}).join(',');

Янковиц 05.10.2017 20:03

Цитата:

Сообщение от Rasy (Сообщение 466673)
Янковиц,
снизу - alert(str);

У меня два блока с идентичным содержанием, как конкретизировать, из какого блока считывать data-name?

laimas 05.10.2017 20:04

Цитата:

Сообщение от Rasy
но автор сразу не правильно сформулировал задачу

Даже так? А я значит экстрасенс?

Rasy 05.10.2017 20:07

Цитата:

Сообщение от laimas
Даже так? А я значит экстрасенс?

Я про первый пост до уточнений. Думаю не экстрасенс.

Янковиц 05.10.2017 20:11

И еще один момент. Вообще, это часть drag and drop системы.
Хватаю из одного блока, и перемещаю в другой. При тестировании, я динамически меняю количество div. Код предложенный в топике повесил на клик кнопки. Однако в alert выводит список с data-name элементов при загрузки страницы, но не фиксирует при динамическое изменение... Как это решить? И еще, данные берет из первого блока а не из второго...

laimas 05.10.2017 20:12

Цитата:

Сообщение от Янковиц
У меня два блока с идентичным содержанием, как конкретизировать

Либо первый, либо последний, выбирайте какой нужен:

var s = $.map($('[data-name]').first(), function(e, i) {...
//или
var s = $.map($('[data-name]').last(), function(e, i) {...

laimas 05.10.2017 20:14

Цитата:

Сообщение от Янковиц
Однако в alert выводит список с data-name элементов при загрузки страницы, но не фиксирует при динамическое изменение...

Для этого существует делегирование, либо данный обработчик добавляется динамически после добавления новых элементов.

Янковиц 05.10.2017 20:17

Цитата:

Сообщение от laimas (Сообщение 466682)
Для этого существует делегирование, либо данный обработчик добавляется динамически после добавления новых элементов.

Делегирование это через on?
Типа такого??:
$('body').on('click', '.save-filter', function(){
		var str = $.map($('[data-name]').last(), function(e, i) {
			return e.getAttribute('data-name') + ':' + ++i * 10
		}).join(',');
		alert(str);
	});


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