代码之家  ›  专栏  ›  技术社区  ›  Hollister

测试jquery中事件目标的最佳语法

  •  0
  • Hollister  · 技术社区  · 15 年前

    我有一个keypress处理程序绑定到表单上的所有输入元素,我需要根据收到keypress的元素执行不同的操作。下面的三种变体都有效,但我想知道是否有一种(或其他的)是首选的,以及为什么。

    $(':input').keypress(function(e) {
      if($(this).attr('id') === 'foo')  // option 1
        console.log('foo'); 
      if($(this)[0] === $('#bar')[0])   // option 2
        console.log('bar');
      if(e.target === $('#baz')[0])     // option 3
        console.log('baz'); 
    });
    

    页面上的元素很少,所以性能不是真正的问题。它更像是一个风格/标准/可读性问题。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Nick Craver    15 年前

    选项4:

    $(':input').keypress(function(e) {
      if(this.id == 'foo') console.log('foo'); 
    });
    

    this 将是处理程序中的一个dom元素,不需要对jquery对象进行检查,只需对本机进行字符串比较 .id DOM property 很清楚,简洁,是最快的-赢,赢。

        2
  •  0
  •   lonesomeday    15 年前

    最好的办法不是这些。使用 this.id 而不是 $(this).attr('id') 性能方面:

    if (this.id == 'foo') {
    

    如果您实际要查找的是具有ID的输入元素,那么更好的方法是在选择器中使用ID。 foo .

    $('#foo').keypress(function(e) {
    

    这将大大快于 :input .