在jQuery语法方面我能得到什么?

时间:2011-12-17 05:16:32

标签: javascript jquery syntax

我看到这用了很多:

$("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方法是否有更简单的版本?

3 个答案:

答案 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() });

thisnotify的值为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和其他扩展。