2013-05-23 3 views
1

Я часто вижу JQuery код похож на какую-либо форму .each(), где она имеет селектор ID:JQuery каждый особого альтернативу

$('#selector').each(function(index, element){ 
    // do something 
}); 

Теперь, понимая, что там будет только один элемент с таким идентификатором, но я хочу, чтобы сохранить в цепной способности объекта jQuery есть другой вариант, отличный от .each(). Есть ли какой-то способ без накладных расходов .each() здесь?

(я знаю, что это nitpicks как погон INTERAL for из каждого не огромный)

Что-то вроде этого примера поддельного «JustMe»:

$('#selector').justme(function(myElement){ 
    alert(myElement.id); 
    // do something 
}).parent('div')... 

Я знаю, что есть, например, :

$('#selector').eq(0) 
$('#selector')[0] 

Но у них отсутствует функция или разрыв цепи jQuery.

+0

'eq()' не разрушает цепочку, и поскольку есть только один выбранный элемент, вам это не нужно. – undefined

+0

только методы, которые не возвращают 'this', разрушат цепочку и' eq ('не является одним из них –

+0

@undefined - true, но ему не хватает' .eq (0, function() {}) 'form –

ответ

3

Я бы не стал беспокоиться о дополнительных накладных расходах (или их отсутствии), но если вам действительно нужен такой плагин, его легко написать.

$.fn.justme = function(callback){ 
    callback.apply(this[0]); 
    return this; 
}; 
+0

Благодарим вас за ответ на этот вопрос, а не просто на несколько теоретический вопрос, как я уже говорил ранее что я был полностью осведомлен о том, что накладные расходы были незначительными для '.each()'. –

4

Я честно понятия не имею, о чем вы говорите, «каждый накладные расходы». each реализуется следующим образом:

each: function(fct) { 
    for (var i = 0; i < this.elements.length; i++) { 
     fct.apply(this.elements[i]); 
    } 
    return this; 
} 

Там нет накладных расходов! Он использует собственное свойство JS, которое является повторным подсчетом закрытия. Для одного элемента вы теряете производительность в одном задании, одно арифметическое сравнение и одно приращение, все три из которых являются атомарными. Это незначительные накладные расходы.

+0

P.S: это псевдокод. –

+0

Я ссылаюсь на функцию 'for' как накладные расходы в этом ограниченном контексте, сколь бы маленьким он ни находился, –

+1

@MarkSchultheiss: по этому рассуждению, почему бы вам не выбросить все jQuery? Это накладные расходы, независимо от того, насколько они малы, поскольку вы можете делать все, что лучше в родном коде. Вы будете получать менее 8 тактов, выполнив эту «оптимизацию», и это, только когда оболочка jQuery содержит один и только один элемент. –

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