Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.10.2018, 17:16
Кандидат Javascript-наук
Отправить личное сообщение для pokk Посмотреть профиль Найти все сообщения от pokk
 
Регистрация: 30.01.2014
Сообщений: 145

как задать порядок нахождения querySelectorAll
Подскажите как сделать, в общем приходит JSON ответ от сервера с данными и эти данные распихиваются по полям input, select и.тд
для каждого ключа в JSNO сделал обработчик, с действием
"Item1": {
		selector: "#id_1",
		action: function(element, data, index){Get_Multi(element, data, index)}
	},

Соответственно и для массива тоже
"CH1": {
		selector: "#Id_1,#Id_2,#id_3",
		action: function(element, data, index){ Get_Multi(element, data, index)}
	},

вызов этого всего выглядит так
[].forEach.call(document.querySelectorAll(handler.selector),function(element) {
			handler.action(element, json[key], elementIndex++);
		}


И все это работало, пока мне не понадобилось сделать кнопку которая меняет местами элементы с Id_1,Id_2
после этого querySelectorAll находит все по порядку, а так как JSNO запрос неизменяемый, то присваивание данных элементам путаются.

Как можно задать порядок поиска или как можно по другому сделать ?
кнопка очень нужна.
Ответить с цитированием
  #2 (permalink)  
Старый 25.10.2018, 18:26
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Исходный набор - перебирается правильно
<div id="id_1">Див 1</div>
<div id="id_2">Див 2</div>

<script>
[].forEach.call(document.querySelectorAll("#id_1,#id_2"), function(elem,i)  {
    elem.innerText = elem.innerText + (i+1);
});
</script>

Переставленный - перебирается НЕправильно
<div id="id_2">Див 2</div>
<div id="id_1">Див 1</div>

<script>
[].forEach.call(document.querySelectorAll("#id_1,#id_2"), function(elem,i)  {
    elem.innerText = elem.innerText + (i+1);
});
</script>


Переставленный с сортировкой - перебирается правильно

<div id="id_2">Див 2</div>
<div id="id_1">Див 1</div>

<script>
Array.from(document.querySelectorAll("#id_1,#id_2")).sort(function (a, b) {
  if (a.id > b.id) {
    return 1;
  }
  if (a.id < b.id) {
    return -1;
  }
  return 0;
}).forEach( function(elem,i)  {
    elem.innerText = elem.innerText + (i+1);
});
</script>

Последний раз редактировалось Dilettante_Pro, 25.10.2018 в 18:35.
Ответить с цитированием
  #3 (permalink)  
Старый 25.10.2018, 20:15
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

в первом приближении можно так:
handler.selector.split(/\s*,\s*/).forEach(function(sel, i)  {
    var elem = document.querySelector(sel);
    ....
});
Ответить с цитированием
  #4 (permalink)  
Старый 25.10.2018, 20:23
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Alexandroppolus, пока не вылезут всякие :not да :any.)
pokk, переписывай handler.action, он не должен быть привязан ни к какому чудесному index, только самому элементу и его свойствам.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 25.10.2018, 23:39
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Сообщение от Aetae
Alexandroppolus, пока не вылезут всякие :not да :any.)
:not пока что только простые единичные селекторы держит. А что за :any?

хотя вот селектор по атрибуту может запятую в значении иметь, тогда надо регексом..
Ответить с цитированием
  #6 (permalink)  
Старый 26.10.2018, 00:16
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

https://developer.mozilla.org/ru/docs/Web/CSS/:any
Удобно чтобы превратить всё в ад.)
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 26.10.2018, 05:22
Кандидат Javascript-наук
Отправить личное сообщение для pokk Посмотреть профиль Найти все сообщения от pokk
 
Регистрация: 30.01.2014
Сообщений: 145

Dilettante_Pro, А как сортировка работает ? хоть я и прочитал про функцию sort, пока не допер как она сортирует, дело в том что у меня id всякие могут быть не с одинаковым префиксом а вот с индексом (_1) одинаковым к примеру такие (#Id_dmx_2,#Id_univ_2,#id_Dmx_ON_OFF_2)
причем сортируются правильно как указал выше в том же порядке.
Aetae, т.е добавить ещё цикл внутри [].forEach.call который перебирает id по handler.selector, и там уже запускается Act без индекса ?

2) Кстати, как суда добавить разбор двух мерного массива JSON
3) В будущем хочу сделать что по данным от JSON ответа, будет строиться вся таблица и сразу заполняться поля
так вот хотел сделать как:
"Table": {
		selector: "#id_1",
		action: function(element, data, index){MakeTable();}
	},

Но тут как внутри MakeTable получить другие значения? Походу это надо будет сделать совсем по другому.

Последний раз редактировалось pokk, 26.10.2018 в 06:23.
Ответить с цитированием
  #8 (permalink)  
Старый 26.10.2018, 10:24
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от pokk
А как сортировка работает ?
Обычная сортировка по символьным строкам
alert(["Id_univ_2","id_Dmx_ON_OFF_2","Id_dmx_2"].sort(function (a, b) {
  if (a > b) {
    return 1;
  }
  if (a < b) {
    return -1;
  }
  return 0;
}));


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

Последний раз редактировалось Dilettante_Pro, 26.10.2018 в 11:36.
Ответить с цитированием
  #9 (permalink)  
Старый 26.10.2018, 12:06
Кандидат Javascript-наук
Отправить личное сообщение для pokk Посмотреть профиль Найти все сообщения от pokk
 
Регистрация: 30.01.2014
Сообщений: 145

Сообщение от Dilettante_Pro Посмотреть сообщение
Обычная сортировка по символьным строкам
А можно по подробнее или ссылку, посимвольно каждую букву в строки сравниваться и аски код буквы ?
"Соответственно, вы должны знать порядок сортировки по индексам"
Сообщение от Dilettante_Pro Посмотреть сообщение
Соответственно, вы должны знать порядок сортировки по индексам, чтобы знать, какой div с каким id будет первым и
Какой индекс ?
Ответить с цитированием
  #10 (permalink)  
Старый 26.10.2018, 17:43
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

pokk,
Сорри, id

Описание sort()

Последний раз редактировалось Dilettante_Pro, 26.10.2018 в 17:54.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как в datepicker задать диапазон дат во время выполнения скрипта. Yurik jQuery 0 23.02.2011 12:19
не понимаю как задать правильный контекст loz Dojo toolkit 2 17.02.2011 18:36
Как задать default value в enctype="multipart/form-dat" Pumych Общие вопросы Javascript 1 15.02.2011 22:07
Как правильно задать ID в создаваемом элементе ? Indiana Events/DOM/Window 15 31.10.2010 16:15
Как сравнивать порядок <li> в списках <ul> Jury jQuery 1 23.09.2010 10:47