2012-12-13 39 views
0

我有一個有趣的選擇語句:

$("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的日期選擇器的工作。它似乎更像是一種黑客/創可貼。但它的工作。

我想繼續使用它,但是我想將它修改爲具有Date的任何元素更全局。

所以,我給了跨越類.datepicker

但是,這完全不是那麼回事,因爲綁定更喜歡特定的ID,定位到該元素。

是否有解決這個問題的方法,或許使用$(this)與選擇器語句的其餘部分結合使用?

也許沿着這條線?

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

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

}); 
+0

請[我的緩存的jQuery對象的問題(http://stackoverflow.com/questions/5724400/does-using-this-instead-的,這-提供-A-性能增強)。請注意,在許多情況下,'element#id'是不必要的,因爲'#id'是所有需要的。我認爲jQuery會因性能原因而優化和放棄'span'。但是,避免重複選擇相同的選擇器(而不是緩存),並理解選擇器序列的影響,並且總體上可以獲得更好的整體性能。 –

回答

2

使用.find()

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

OR

$(">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

選擇器是普通的字符串。

你試圖寫

$(this).find(">form>input.inplace_field") 
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(); 
});