25.10.2018, 17:16
|
Кандидат Javascript-наук
|
|
Регистрация: 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 запрос неизменяемый, то присваивание данных элементам путаются.
Как можно задать порядок поиска или как можно по другому сделать ?
кнопка очень нужна.
|
|
25.10.2018, 18:26
|
Профессор
|
|
Регистрация: 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.
|
|
25.10.2018, 20:15
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
в первом приближении можно так:
handler.selector.split(/\s*,\s*/).forEach(function(sel, i) {
var elem = document.querySelector(sel);
....
});
|
|
25.10.2018, 20:23
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,584
|
|
Alexandroppolus, пока не вылезут всякие :not да :any.)
pokk, переписывай handler.action, он не должен быть привязан ни к какому чудесному index, только самому элементу и его свойствам.
__________________
29375, 35
|
|
25.10.2018, 23:39
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
Сообщение от Aetae
|
Alexandroppolus, пока не вылезут всякие :not да :any.)
|
:not пока что только простые единичные селекторы держит. А что за :any?
хотя вот селектор по атрибуту может запятую в значении иметь, тогда надо регексом..
|
|
26.10.2018, 00:16
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,584
|
|
__________________
29375, 35
|
|
26.10.2018, 05:22
|
Кандидат Javascript-наук
|
|
Регистрация: 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.
|
|
26.10.2018, 10:24
|
Профессор
|
|
Регистрация: 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.
|
|
26.10.2018, 12:06
|
Кандидат Javascript-наук
|
|
Регистрация: 30.01.2014
Сообщений: 145
|
|
Сообщение от Dilettante_Pro
|
Обычная сортировка по символьным строкам
|
А можно по подробнее или ссылку, посимвольно каждую букву в строки сравниваться и аски код буквы ?
"Соответственно, вы должны знать порядок сортировки по индексам"
Сообщение от Dilettante_Pro
|
Соответственно, вы должны знать порядок сортировки по индексам, чтобы знать, какой div с каким id будет первым и
|
Какой индекс ?
|
|
26.10.2018, 17:43
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
pokk,
Сорри, id
Описание sort()
Последний раз редактировалось Dilettante_Pro, 26.10.2018 в 17:54.
|
|
|
|