Javascript 什么';这是:$(this.el).html和this.el.html之间的区别

Javascript 什么';这是:$(this.el).html和this.el.html之间的区别,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,这两者之间的区别是什么: $(this.el).html 及 阅读一些主干示例,有些示例以一种方式或另一种方式进行操作。如果$el存在于this上,并且是一个jQuery对象,您不应该使用$(this.el),因为当一个jQuery对象已经存在时,它将初始化一个新的jQuery对象。将一个元素包装在$()将jQuery扩展附加到对象原型。一旦这样做了,就不需要再做了,尽管多次这样做除了性能之外没有什么坏处。$(this.el)用jQuery(或Zepto)包装元素。因此,如果您的HTML视图是

这两者之间的区别是什么:

$(this.el).html


阅读一些主干示例,有些示例以一种方式或另一种方式进行操作。

如果
$el
存在于
this
上,并且是一个jQuery对象,您不应该使用
$(this.el)
,因为当一个jQuery对象已经存在时,它将初始化一个新的jQuery对象。

将一个元素包装在$()将jQuery扩展附加到对象原型。一旦这样做了,就不需要再做了,尽管多次这样做除了性能之外没有什么坏处。

$(this.el)
用jQuery(或Zepto)包装元素。因此,如果您的HTML视图是这样的:

…和
this.el
引用了该div,那么
$(this.el)
将相当于通过jQuery直接检索它:
$('#myViewElement')

this.$el
是对jQuery(或Zepto)对象的缓存引用,因此是调用
$(this.el)
得到的内容的副本。这样做的目的是为了避免调用
$(this.el)
,这可能会带来一些开销,从而影响性能

请注意:这两者并不等同
this.el
单独是对主机对象HtmleElement的引用——不涉及库。这是
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)
的额外调用最终可能会返回缓存结果,这就是为什么我说“可能存在性能问题”。它也可能不是

文档

  • 视图。$el
    -
  • $
    在主干中-
  • jQuery基本对象-
  • Zepto基本对象-
    • 我通常会看到:

      var markup = $(this).html();
      $(this).html('<strong>whoo hoo</strong>');
      
      这两个对象本质上是*等价的,
      $el
      是jQuery或Zepto对象的一部分
      el
      ,您看到使用
      $(this.el)
      的示例的原因是,它只添加在backbone.js(0.9.0)的更高版本中


      *从技术上讲,
      $(this.el)
      将(可能)在每次调用它时创建一个新的jQuery/Zepto对象,而
      则是this。$el
      将每次引用相同的对象。

      它们产生完全相同的结果;即,对视图元素的引用$el只是$(this.el)的jquery包装器。看看这个参考:$el

      检查一下,总有一天你会失去你的手指,一遍又一遍地输入jQuery,担心冲突。只需执行:
      (函数($){/*您的jQuery代码在这里带有防弹的“$”*/})(jQuery)(或者对不需要jQuery的东西停止使用jQuery?)Meh。我过度使用jQuery,并将其键入,还有其他原因。我过度使用它是因为它具有很好的跨平台性能。至于打字,好吧,总有一天我会买仿生手指——就像那些小鸡们用的壳中幽灵一样。我们有成千上万的商人。我整天都在和别人打交道。小片段。当我不得不每天为几十个站点提供代码时,我很高兴每次都能拼出jQuery。最后,我认为它读起来更快。但是,每个人都有自己的想法。投票赞成指出两者确实不同。它们都引用对象,而这些对象又引用相同的底层DOM元素,并且都是jQuery对象,但都是两个不同jQuery对象的副本。这是一个微妙的区别,但无论如何,这是一个区别。我认为使用“$(this.el)”版本没有任何意义,而重用另一个版本更有效。
      
      var markup = $(this).html();
      $(this).html('<strong>whoo hoo</strong>');
      
      jQuery(document).ready(function(){
          jQuery('.rom_num').each(function(idx,el){
              var span = jQuery(el);
              span.html(toRoman(span.text()));
          });
      });