2012-04-04 5 views
0

У меня есть следующая строка jQuery, но кажется, что излишним использовать .each().Есть ли лучший способ написать этот jQuery?

$('span[data-private]').each(function() { 
    $(this).text($(this).attr("data-hidden")); 
}); 

Есть ли лучший способ, чтобы написать эту JQuery, что будет выглядеть примерно так:

// This doesn't work as $(this) refers to document not the current selector 
// but it gives the idea of what I'm looking for. I want to reference the current 
// selector 
$('span[data-private]').text($(this).attr("data-hidden")); 

Заранее спасибо за помощь!

+0

Нужна некоторый контекст, на какое событие это должно произойти ... –

ответ

3

Метод each() следует использовать при прохождении через элементы. Если у вас есть несколько элементов, чтобы применить эту функцию, чтобы затем использовать это:

$('span[data-private]').each(function() { 
    $(this).text($(this).attr("data-hidden")); 
}); 

В качестве альтернативы, если вы только применять эту функцию к одному элементу, а затем просто использовать обратный вызов по методе text() следующим образом:

$('span[data-private]').text(function() { 
    return $(this).attr("data-hidden"); 
}); 

Ни один из этих двух методов налогообложения в любом случае, однако, этот метод немного чуть менее обременительным, поскольку это не проходное элементов

+3

И я ем бананы, не означает, что _everyone_ должно – Neal

+0

@Neal Что я имею в виду, я не замечал, любое отставание в производительности от его использования. Это отличная функция, и в этом случае это необходимо! –

+0

это цикл, это куча действий, которые срабатывают один за другим, если вы можете сохранить дополнительные операции, также можете оптимизировать, потому что позже, когда ваш код превратится в полноценную библиотеку или что-то, вы будете рады, что вы все время спасает операции ... –

0

Хммм, может быть, попробовать что-то вроде этого:

(function(){ 
    var $self = $('span[data-private]'); 
    $self.text($self.data('hidden')); 
})() 
+0

Будет ли этот цикл через все элементы? Почему это лучше, чем метод 'each()'? –

+0

@BenCarey это *** не будет пробивать ничего. – Neal

+0

Точно! RHarris не хочет применять это ко всем элементам, или есть только один? ** Мы не знаем !!! ** –

2

.text можно передать функцию обратного вызова.

$('span[data-private]').text(function(){ 
    return $(this).attr("data-hidden"); 
}); 

DEMO: http://jsfiddle.net/9w69E/

+0

Неужели это меньше налогов, чем просто использование .each()? – RHarris

+1

@RHarris ни ** действительно ** это *** налог *** – Neal

+0

@RHarris: Что вы подразумеваете под «налогообложением»? Я бы не стал слишком беспокоиться о производительности. –

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