как задать порядок нахождения 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 запрос неизменяемый, то присваивание данных элементам путаются. Как можно задать порядок поиска или как можно по другому сделать ? кнопка очень нужна. |
Исходный набор - перебирается правильно
<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> |
в первом приближении можно так:
handler.selector.split(/\s*,\s*/).forEach(function(sel, i) { var elem = document.querySelector(sel); .... }); |
Alexandroppolus, пока не вылезут всякие :not да :any.)
pokk, переписывай handler.action, он не должен быть привязан ни к какому чудесному index, только самому элементу и его свойствам. |
Цитата:
хотя вот селектор по атрибуту может запятую в значении иметь, тогда надо регексом.. |
https://developer.mozilla.org/ru/docs/Web/CSS/:any
Удобно чтобы превратить всё в ад.) |
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 получить другие значения? Походу это надо будет сделать совсем по другому. |
Цитата:
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 будет первым и т.д. |
Цитата:
"Соответственно, вы должны знать порядок сортировки по индексам" Цитата:
|
|
Часовой пояс GMT +3, время: 16:03. |