2013-09-20 4 views
-5

Я извлекаю текстовое значение, находящееся внутри элементов <a>, используя функцию jQuery .each() и сохраняя ее в массиве. Я нашел следующие два метода и не уверен, что я должен предпочесть.Функция jQuery .each() - Какой метод оптимизирован?

var textArr = []; 

// Method 1 
var textLinks = $("a").each(function(){ 
    textArr.push($.trim($(this).text())); 
}); 


//Method 2 
$("a").each(function(){ 
    textArr.push($.trim($(this).text())); 
}); 

Каковы плюсы & минусы Метод 1 и метод 2?

+2

Они оба идентичны, это просто в первом назначении результат '$ («A»)' в переменную – CodingIntrigue

+1

Где разница? – Bergi

+0

Проверьте это: http://jsperf.com/ – epascarello

ответ

1

Я хотел бы использовать map(), потому что это не существует для этой цели (нет необходимости временного массива)

var textLinks = $("a").map(function(){ 
    return $.trim($(this).text()); 
}); 

Edit: Если я искал самое быстрое решение, которое я хотел бы начать с канавами JQuery;)

var textLinks = (Array.prototype.slice.call(document.links)).map(function(a){ return a.textContent || a.innerText }) 

Или, если вы беспокоитесь о браузерах без использования Array.map простой старый в то время как цикл. Похож на беспорядок, но это БЫСТРО.

var textLinks = (function(links, out){ 
    var i = links.length, a; 
    while(a = links[--i]){ out[i] = a.textContent || a.innerText } 
    return out; 
}(document.links,[])) 

Added to jsperf test

+1

Вышеприведенный комментарий jashwant кажется быстрее вашего сообщения. [jsperf] (http://jsperf.com/eachandother) –

+0

@Mr_Green Я использовал 'map', поскольку он четко выражает намерение кода -« создайте новый список с каждым элементом, преобразованным в соответствии с этими правилами », каждый' означает «сделать * что-то» для каждого элемента списка ». – pawel

+0

+1 Еще я узнал о JS из последнего подхода :) –

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