2015-11-17 3 views
2

Я выбираю группу элементов в моем DOM так:Мой массив jQuery численно не индексируется?

var menu_items = $('#ubermenu-nav-main-0-primary > li a span') 
     .not('#ubermenu-nav-main-0-primary > li ul li a span'); 

menu_items.each(function(i){ 
    var strings = []; 
    strings.push = this.innerHTML; 
    console.log(strings); 
}); 

После нажатия все элементы на мой массив - Я действительно хочу, массив Численно индексированные, но то, что я на самом деле получить выглядит следующим образом:

console

Что-то не так?

+3

вы сбросом 'strings' массива каждый раз ... – Pogrindis

ответ

1

Чтобы получить текст узла в массив, рассмотрите возможность использования jQuery's .map(). Как так:

var menu_items = $('#ubermenu-nav-main-0-primary > li a span') 
     .not('#ubermenu-nav-main-0-primary > li ul li a span'); 

var strings = menu_items.map (function(){ 
    return this.innerHTML.trim(); 
}).get(); 
console.log (strings); 

Примечание:

  1. При получении текста со страницы, вы почти всегда хотите trim в начальные и конечные пробелы.
  2. Возможно, вы захотите использовать textContent вместо innerHTML.
+1

Это действительно возвращало объект с моими пунктами меню. – cookie

+0

См. Отредактированный ответ. Выполните команду '.get()' для возврата массива. –

1

Не перезаписывать массива в каждой итерации, принять свою декларацию снаружи на each() петли:

var strings = []; 
menu_items.each(function(i){ 
    strings.push(this.innerHTML); 
    console.log(strings); 
}); 
+1

Это не работает для меня. Я закончил с массивом с одним элементом в нем (Contact) с индексом 'push' – cookie

+0

Потому что это не то, как работают push – epascarello

+0

Извините, я скопировал вашу ошибку, не заметил этого. Я обновил свой ответ. –

1
var menu_items = $('#ubermenu-nav-main-0-primary > li a span') 
    .not('#ubermenu-nav-main-0-primary > li ul li a span'); 

var strings = []; 
menu_items.each(function(i){ 
    strings.push = this.innerHTML; 
    console.log(strings); 
}); 

Вы должны установить массив строк за пределами каждой петли.

1

У вас есть две проблемы: переопределение массива на каждой итерации и использование ключа вместо метода push.

var strings = []; //<-- defined outside 
menu_items.each(function(i){ 
    strings.push(this.innerHTML); //<-- push is a method 
    console.log(strings); 
}); 

Или, как я хотел бы сделать это

var strings = menu_items.each(function(ind, elem){ return elem.innerHTML; }).get(); 
+0

Brilliant - У меня теперь есть массив, а не объект. Большое спасибо epascarello. – cookie

+0

Ницца. Мне нужно настроить первое слово в каждом значении массива (игла в стоге сена), сделав его жирным текстом. Но может быть, это еще один вопрос. – cookie

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