我看到这用了很多:
$("img").hide( 800, function() {
$(this).show();
});
...但我们可以得到同样的效果:
$("img").hide( 800, "$(this).show();" );
我看到这用了很多:
$(this).hide();
...但我们可以得到同样的效果:
this.hide();
......怎么样:
$("this").hide();
我看到这用了很多:
element.click(function() {
notify();
});
...但我们可以得到同样的效果:
element.click(notify);
我的观点:
我们通常使用的常见jQuery方法是否有更简单的版本?
答案 0 :(得分:1)
嗯,不,你不能。如果...但我们可以得到同样的效果:
$(“img”)。hide(800,“$(this).show();”);
hide
的第二个参数是一个字符串,那么它应该是一个缓动而"$(this).show();"
不是缓和;因此$("img").hide( 800, "$(this).show();" );
会将难以理解的错误放入您的控制台,甚至不会隐藏任何内容。
如果你看到了这个:
$(this).hide;
使用了很多,然后你看了很多无用的代码,你应该开始寻找更好的代码。 $(this).hide;
没有做任何有用的事情,也许它会运用你的JavaScript引擎的死代码删除算法,但它肯定不会隐藏页面上的任何内容。说$(this).hide;
并不比说42;
更有成效;当然,他们都是法律陈述,但他们没有做任何有用的事情。
也许你的意思是:
$(this).hide();
但这与this.hide();
完全不同,除非this
已经是jQuery对象。标准DOM对象没有hide
方法,因此this.hide();
通常是错误,而$(this).hide();
隐藏DOM对象并转到下一个语句。
最后,我们得到的东西至少是有意义的:
element.click(function() { notify(); }); // [...] element.click(notify);
click
函数只需要一个回调函数,因此你可以给它一个函数名或匿名函数(即函数“literal”)。同样,您可以说pancakes(11);
或var eggs = 11; pancakes(11);
。
所以是的,您可以使用命名函数作为jQuery回调;但是,这两个element.click
来电是不等效。在第一种情况下:
element.click(function() { notify() });
this
内notify
的值为window
;在第二种情况下:
element.click(notify)
this
将是notify
内的元素DOM对象。
也许这不是一个很好的答案,但我需要更多的空间而不是评论提出来指出你问题中的所有混淆。
答案 1 :(得分:0)
$(this).hide;
实际上不会做任何事情,我认为你的意思是$(this).hide()
?
this.hide();
您需要更深入地了解jQuery的工作原理以及DOM的工作原理。在大多数情况下,$(this)
将本地DOM元素this
的值包装到jQuery对象中。普通DOM元素没有隐藏方法。
例如,您无法执行document.getElementsByTagName('body')[0].hide()
,因为DOM body元素没有hide方法。 jQuery将元素包装成一个jQuery对象,它实际上是一个包含很多很酷方法的数组,比如hide()
$("this").hide;
最后,我认为您需要更深入地了解Javascript的工作原理。 this
关键字是特殊的,与字符串"this"
无关。
这是一个基于误解原则的模糊问题,我认为这是一个非常好的例子,说明为什么你应该专注于学习Javascript,而不是jQuery。
答案 2 :(得分:-1)
element.click(notify);
element.click(function() {
notify();
});
第一个将在通过该行时执行函数notify(使用调试器检查)。它也会显而易见 - 附加一个点击事件。第二个不会在将该函数附加到click事件时调用notify。
至于其他差异 - 它们与jQuery差异不大,但Javascript语法差异。这里有很多不一致的地方 - 很多都来自浏览器支持以及它们如何实际实现官方ECMAscript,DOM和其他扩展。