Подтвердить что ты не робот

Какая разница между: $(this.el).html и этим. $El.html

Какая разница между:

$(this.el).html

и

this.$el.html

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

4b9b3361

Ответ 1

$(this.el) обертывает элемент с помощью jQuery (или Zepto). Итак, если ваш HTML-код выглядит следующим образом:

<div id="myViewElement"></div>

... и this.el ссылаются на div, тогда $(this.el) будет эквивалентом получения его непосредственно через jQuery: $('#myViewElement').

this.$el - это кешированная ссылка на объект jQuery (или Zepto), поэтому копия того, что вы получили бы от вызова $(this.el). Цель состоит в том, чтобы избавить вас от необходимости называть $(this.el), что может иметь некоторые накладные расходы и, следовательно, проблемы с производительностью.

Обратите внимание: оба не эквивалентны. this.el только является ссылкой на объект-объект HTMLElement - не задействованы библиотеки. Это возврат document.getElementById. $(this.el) создает новый экземпляр объекта jQuery/Zepto. this.$el ссылается на один экземпляр первого объекта. Нельзя использовать какой-либо из них, если вы понимаете стоимость нескольких вызовов $(this.el).

В коде:

this.ele = document.getElementById('myViewElement');
this.$ele = $('#myViewElement');

$('#myViewElement') == $(this.ele);

Кроме того, стоит упомянуть, что jQuery и Zepto имеют частичные внутренние кеши, поэтому дополнительные вызовы $(this.el) могут в конечном итоге вернуть кешированный результат, и поэтому я говорю "может иметь проблемы с производительностью". Это также не может быть.

Documentation

Ответ 2

Эти два существенно эквивалентны, причем $el является кэшированной версией объектов jQuery или Zepto el, причина почему вы видите примеры с использованием $(this.el), потому что он был добавлен только в более поздний выпуск backbone.js(0.9.0).

* Технически, как Chris Baker указывает, что $(this.el) будет (возможно) создавать новый объект jQuery/Zepto каждый раз, когда вы его вызываете, пока this.$el будет ссылаться на один и тот же каждый раз.

Ответ 3

Если $el существует в this и является объектом jQuery, вы не должны использовать $(this.el), потому что он будет инициализировать новый объект jQuery, если он уже существует.

Ответ 4

Они дают точно то же самое; то есть ссылку на элемент вида. $el - это просто оболочка jquery для $(this.el). Посмотрите на эту ссылку: http://documentcloud.github.com/backbone/#View- $el

Ответ 5

Я обычно вижу это:

var markup = $(this).html();
$(this).html('<strong>whoo hoo</strong>');

Я согласен с Раминоном. Ваши примеры, которые вы видели, выглядят неправильно.

Этот код обычно отображается в цикле jquery, например, каждый() или обработчик событий. Внутри цикла переменная 'el' указывает на чистый элемент, а не на объект jQuery. То же самое верно для 'this' внутри обработчика событий.

Когда вы видите следующее: $(el) или $(this), автор получает ссылку jQuery на объект dom.

Вот пример, который я использовал для преобразования чисел в римские числа: (Заметьте, я всегда использую jQuery вместо $- слишком много коллизий с mootools...)

jQuery(document).ready(function(){
    jQuery('.rom_num').each(function(idx,el){
        var span = jQuery(el);
        span.html(toRoman(span.text()));
    });
}); 

Ответ 6

Обтекание элемента в $() добавляет расширения jQuery к прототипу объекта. После этого это не нужно делать снова, хотя нет никакого вреда, кроме производительности, делая это несколько раз.