第一版:
$(".myClass").focus(function() {
var MyRef=$(this);
if (MyRef.val() == MyRef.attr("rel")) {
MyRef.val("");
}
});
$(".myClass").focusout(function() {
var MyRef=$(this);
if (MyRef.val() == "") {
MyRef.val(MyRef.attr("rel"));
}
});
第二版:
$(".myClass").focus(function() {
if ($(this).val() == $(this).attr("rel")) {
$(this).val("");
}
});
$(".myClass").focusout(function() {
if ($(this).val() == "") {
$(this).val($(this).attr("rel"));
}
});
那么,如果没有保存this
变量或使用它?还是没有改变?
答案 0 :(得分:2)
保存对包含this
的jQuery对象的引用会更快,因为每次要将jQuery方法应用于this
时都不需要构造新的jQuery对象。在您的第一个示例中,有一次调用$
。在第二个例子中有3个。
我不确定你在这做什么:
$(MyRef.val(MyRef.attr("rel"));
那应该只是:
MyRef.val(MyRef.attr("rel"));
答案 1 :(得分:2)
前者通常是首选 - 如果你要反复使用相同的jQuery构造函数,你应该缓存它。
也就是说,实际上你根本不需要在这些函数中使用jQuery方法 - 以下代码比以下代码更有效:
$(".myClass").focus(function() {
if (this.value === this.getAttribute('rel') {
this.value = '';
}
});
$(".myClass").focusout(function() {
if (this.value === '') {
this.value = this.getAttribute('rel');
}
});
答案 2 :(得分:2)
建议在包装的jQuery集中缓存当前Element,因为需要工作才能将标准DOM元素转换为jQuery包装集。因此,我建议采用第一种方法。
清晰的一个好方法是在jQuery对象中包装DOM元素时遵循命名约定。我个人总称它为$this
- 美元告诉我它是一个jQuery对象(我使用的另一个约定),this
告诉我它是当前元素
答案 3 :(得分:1)
我认为第一个更好,因为它可以让你免于调用jQuery(this)
(这是对函数的调用)很多次