как задать порядок нахождения 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, время: 20:04. |