jQuery选择器和$(this)

时间:2012-12-13 01:48:44

标签: jquery jquery-selectors

我有一个有趣的选择声明:

$("span#dateofbirth").bind('click', function() {
  $("span#dateofbirth>form>input.inplace_field").blur();
  $("span#dateofbirth>form>input.inplace_field").removeClass("inplace_value");
  $("span#dateofbirth>form>input.inplace_field").datepicker({dateFormat:'yy-mm-dd'});
  $("span#dateofbirth>form>input.inplace_field").addClass("inplace_value");
  $("span#dateofbirth>form>input.inplace_field").focus();
});

它实际上是由其他人插入的,以使jQuery UI datepicker与Edit-in-Place插件一起工作。它看起来比任何东西都更像是黑客/创可贴。但它确实有效。

我想继续使用它,但我想修改它以使任何具有Date的元素更加全局。

所以,我给了跨度一类.datepicker

但是,它并不常用,因为绑定更喜欢特定的ID,以便本地化到该元素。

有没有解决方法,可能使用$(this)和其他选择器语句?

也许是沿途的事情?

$("span.datepicker").bind('click', function() { 

  $(this+">form>input.inplace_field").blur();

});

3 个答案:

答案 0 :(得分:2)

选择器是普通的字符串。

您正在尝试撰写

$(this).find(">form>input.inplace_field")

答案 1 :(得分:2)

使用.find()

$(this).find(">form>input.inplace_field")

$(">form>input.inplace_field" , this)  // Provide a context to search in

<强> JS

$("span#dateofbirth").bind('click', function() {
  $(">form>input.inplace_field" , this).blur()
          .removeClass("inplace_value")
          .datepicker({dateFormat:'yy-mm-dd'})
          .addClass("inplace_value")
          .focus();
});

您应该chaincache选择器减少查询 DOM的次数。

答案 2 :(得分:0)

现在,jQuery选择器中不推荐使用子选择器>(在CSS中仍然可以)。

您应该使用以下内容:

$(".datepicker").on('click', function() {
  $(this).children("form").children("input.inplace_field").blur()
          .removeClass("inplace_value")
          .datepicker({dateFormat:'yy-mm-dd'})
          .addClass("inplace_value")
          .focus();
});