2016-12-08 6 views
-2

Я пытаюсь присвоить вложенный объект (в casperjs):Назначают ребенок объект в casperjs

var yearz = []; 
    var yearz2 = $('#form_model optgroup'); 
    yearz2.each(function() { 
     var theyear = $(this).attr('label');   
     var theobj = { 
      Year: theyear, 
      Thing: [{}] 
     }; 

     for (var i = 0; i < $(this).children().length; i++){ 
      theobj["Thing"].push({Name: $(this).children()[i].attr("value")}); 
     } 

     yearz.push(theobj); 
    }); 

this.echo(yearz) возвращается null Вы можете увидеть проблему?

С наилучшими пожеланиями

EDIT

var yearz = []; 
var yearz2 = $('#form_model optgroup'); 
yearz2.each(function() { 
    var theyear = $(this).attr('label'); 
    var lengthch = $(this).children().length; 
    var thisch = $(this).children();  
    var theobj = []; 
    var alls = []; 

    for (var i = 0; i < lengthch; i++){ 
     alls.push(thisch.attr("value")); 
    } 

    theobj = { 
     Year: theyear.trim(), 
     Thing: alls 
    }; 

    yearz.push(theobj); 
}); 

Это толкает тот же элемент в alls массиве. Но их два. Как я могу нажать оба из них, а не дважды?

Это не работает:

for (var i = 0; i < lengthch; i++){ 
    alls.push(thisch[i].attr("value")); //Note [i] here. 
} 
+0

Вам нужно объяснить, что вы подразумеваете под «не работает» – Itay

+0

@Satpal не работает. Возвращаемый объект «null» – user1665355

+0

Что возвратил объект? У вас нет оператора возврата в этом коде. – Quentin

ответ

1
alls.push(thisch[i].attr("value")); //Note [i] here. 

Это не работает, потому что [] возвращает DOM , а не объект jQuery и DOM не имеет .attr()

так должно быть

thisch.eq(i).val() 

или

thisch[i].value 

Вы также можете просто использовать каждый() или карту() вместо того, чтобы для цикла.

var values = thisch.map(function() { return this.value; }).get(); 
+0

Большое спасибо! Не знал этого. Итак, '[]' возвращает DOM? – user1665355

-2

выстрел в темноте, потому что контекст неизвестен, но попробуйте:

var yearz = []; 
var yearz2 = $('#form_model optgroup'); 
yearz2.each(function(i, item) { 
    var theyear = $(item).attr('label');   
    var theobj = { 
     Year: theyear, 
     Thing: [{}] 
    }; 

    for (var i = 0; i < $(item).children().length; i++){ 
     theobj["Thing"].push({Name: $(item).children()[i].attr("value")}); 
    } 

    yearz.push(theobj); 
}); 
+0

Нет объекта по-прежнему 'null' – user1665355

+0

Что делает отчет yearz2.length после того, как вы его назначили? Добавить предупреждение после задания для проверки? – codemonkey65

+0

См. Мое редактирование – user1665355

 Смежные вопросы

  • Нет связанных вопросов^_^