Проблема выполнения свой JS на странице.

OTEC_SERGIUS

Client
Регистрация
04.10.2014
Сообщения
387
Благодарностей
69
Баллы
28
Код:
var menu = $(".left_products_list .pro_list2");
var result = [];

menu.each(function( index ) {
   var temp = [];
   var temp2 = [];
   var key = $( this ).find( "a" ).attr( "title" );
 
   var childrens =  $( this ).find( ".pro_list3 a" );
   childrens.each(function( index ) {
       var key = $( this ).attr( "title" );
       var url = $( this ).attr( "href" );
       temp2[key] = url;
     
   });
 
   result[key] = temp2;
});


return result;

Проблема в том что не возвращается результат выполнения.
Я думаю что то в цикле menu.each(function( index ) { идёт не так.
 

Вложения

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
25
Баллы
18
Я написал разрабам об этой проблеме, они уже отписались, что будут устранять, используй пока цикл FOR

В смысле я ранее обращался с похожим вопросом, в моем случае это foreach
 
  • Спасибо
Реакции: OTEC_SERGIUS

OTEC_SERGIUS

Client
Регистрация
04.10.2014
Сообщения
387
Благодарностей
69
Баллы
28

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
25
Баллы
18
Несколько дней назад, но попытки были и раньше, заметили недавно
 
  • Спасибо
Реакции: OTEC_SERGIUS

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 857
Баллы
113
А переменная menu - точно объект jQuery? И какая версия jQ на сайте (в совсем старых тупо может не быть .each() )?
 

OTEC_SERGIUS

Client
Регистрация
04.10.2014
Сообщения
387
Благодарностей
69
Баллы
28
А переменная menu - точно объект jQuery? И какая версия jQ на сайте (в совсем старых тупо может не быть .each() )?
Я же это в ручную через консоль браузера проверял.
И в Chrome и в Firefox console.log возвращал всё правильно.
jquery-1.7.2.min.js на сайте.
 

OTEC_SERGIUS

Client
Регистрация
04.10.2014
Сообщения
387
Благодарностей
69
Баллы
28
Я запотел и переписал свой код без jQuery и на одних только for:
НО ВСЁ РАВНО НИЧЕ НЕ ВОЗВРАЩАЕТ!!! ПОЧЕМУ?

Код:
var menu = document.querySelectorAll('.left_products_list .pro_list2');
var result = [];


for (var key in menu)  if (menu.hasOwnProperty(key)) {
     var temp = [];
     var temp2 = [];
  
     var key2 = menu[key].querySelector('a').getAttribute("title");
  
  
     var childrens =  menu[key].querySelectorAll('.pro_list3 a');
  
  
     for (var key3 in childrens) if (childrens.hasOwnProperty(key3)) {
     console.log(childrens[key3]);
         var key4 = childrens[key3].getAttribute("title");
         var url = childrens[key3].getAttribute("href");
         temp2[key4] = url;
     }


   result[key2] = temp2;
  

}


return result;
 

Вложения

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
25
Баллы
18
  • Спасибо
Реакции: OTEC_SERGIUS

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
25
Баллы
18
  • Спасибо
Реакции: OTEC_SERGIUS

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
25
Баллы
18
Вместо for (var key in menu)
Код:
For (var i = 0, l = nemu.length; i < l; ++i) {
  menu.item(i) ... // какие-то действия с элементом
}
 
  • Спасибо
Реакции: OTEC_SERGIUS

OTEC_SERGIUS

Client
Регистрация
04.10.2014
Сообщения
387
Благодарностей
69
Баллы
28

Вложения

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
25
Баллы
18
Ты на путал много, ассоциативные массивы поддерживаются с ECMA 6

Код:
var menu = document.querySelectorAll('.left_products_list .pro_list2'); //проверять принадлежность свойства hasOwnProperty не нужно
var result = [];

for (var i = 0, l = menu.length; i < l; ++i) {

     var temp = []; //не используется
     var temp2 = [];
                      //menu.item(i) ...
     var key2 = menu[i].querySelector('a').getAttribute("title"); //key2 тип строка
     var childrens =  menu[i].querySelectorAll('.pro_list3 a');
   
   
     for (var i2 = 0, l2 = childrens.length; i2 < l2; ++i2) {
         var key4 = childrens[i2].getAttribute("title"); //key4 тип строка
         var url = childrens[i2].getAttribute("href");
         temp2[key4] = url; // ошибка строковый ключ массива
     }

 
   result[key2] = temp2; //ошибка строковый ключ массива
 
}

return result; //нельзя возвращать массив  нужно JSON.stringify(result) возвращаем строку
 
  • Спасибо
Реакции: OTEC_SERGIUS

OTEC_SERGIUS

Client
Регистрация
04.10.2014
Сообщения
387
Благодарностей
69
Баллы
28
В яблочко!)))) Это из за того что ассоциативный массив. Зенно почему то его не переваривает.
Лови 6 лайков от меня:ax:
-=-=-=-=-=-=-
P.S. Когда товарищи разработчики перейдут на ECMA 6?????????????!!!!!!!!!!!!!!!!!!!!!:dy::dy::dy:
 

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
25
Баллы
18
рабочий вариант на C#

Код:
var tab = instance.ActiveTab;
if ((tab.IsNull) || (tab.IsVoid)) return -1;

project.Variables["res"].Value = tab.MainDocument.EvaluateScript(@"
var menu = document.querySelectorAll('.left_products_list .pro_list2');
var result = {};

for (var i = 0, l = menu.length; i < l; ++i) {

     var temp2 = {};
     var item = menu.item(i);
     var key2 = item.title;
     var childrens =  item.querySelectorAll('.pro_list3 a');
     
     for (var i2 = 0, l2 = childrens.length; i2 < l2; ++i2) {
         var child = childrens.item(i2);
         var key4 = child.title;
         var url = child.href; // getAttribute("href") - вернет значение которое записано в href (my_post.html), 
                                      //child.href - вернет абсолютный url  (http://site.com/my_post.html) 
         temp2[key4] = url;
     }
   result[key2] = temp2;
}
return JSON.stringify({""loaders"":result});
");
 
  • Спасибо
Реакции: OTEC_SERGIUS

OTEC_SERGIUS

Client
Регистрация
04.10.2014
Сообщения
387
Благодарностей
69
Баллы
28
А какой профит js записывать через C#?
Так разве доступны плюхи ES6?
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Кто бы нам ещё подкинул в зеннопостер поддержку C# 6.0/7.0, а вы тут уже на ES6 засматриваетесь, который в последнее время разработчиками зеннолаба вообще ни во что не ставится
 

OTEC_SERGIUS

Client
Регистрация
04.10.2014
Сообщения
387
Благодарностей
69
Баллы
28
рабочий вариант на C#
Дело было что я неправильно объявил переменные. Надо было не [], а {}
var result = {};
var temp2 = {};
Объектами надо было. Вот почему JSON.stringify не хотел ничего возвращать мне.
И кстати работает даже моя первая версия кода из поста #1. И result можно перебрасывать из JS в C# даже без JSON.stringify.
ТЕМА ПОТУШЕНА)
 
Последнее редактирование:

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
25
Баллы
18

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
25
Баллы
18
Дело было что я неправильно объявил переменные. Надо было не [], а {}
var result = {};
var temp2 = {};
Объектами надо было. Вот почему JSON.stringify не хотел ничего возвращать мне.
И кстати работает даже моя первая версия кода из поста #1. И result можно перебрасывать из JS в C# даже без JSON.stringify.
ТЕМА ПОТУШЕНА)
а возвращается всё равно строка ?
 

OTEC_SERGIUS

Client
Регистрация
04.10.2014
Сообщения
387
Благодарностей
69
Баллы
28

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
25
Баллы
18

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)