我无法在任何地方找到类似这样的语法:
var mz = jQuery.noConflict(); mz('#zoom01, .cloud-zoom-gallery').CloudZoom();
这意味着: jQuery.noConflict()('#zoom01, .cloud-zoom-gallery').CloudZoom();
这样的事情:
$(window)[this.off?'off':'on']("scroll", fixDiv );
所以,我想知道类似这些的语法:
jQuery.noConflict()(syntax)
而且$(window)[syntax](syntax)
我也认为可能会有这样的事情$(selector){syntax}
任何人都可以详细说明这些语法吗?
最好的起点是文档
$ .noConflict()
许多JavaScript库使用$作为函数或变量名,就像jQuery一样.在jQuery的情况下,$只是jQuery的别名,因此所有功能都可以在不使用$的情况下使用.如果你需要在jQuery旁边使用另一个JavaScript库,那么通过调用$ .noConflict()将$的控制权返回给另一个库.在jQuery初始化期间保存$的旧引用; noConflict()只是简单地恢复它们.
换句话说,noConflict()
将变量设置为相等jQuery
,所以这个
var mz = jQuery.noConflict(); mz('#zoom01, .cloud-zoom-gallery').CloudZoom();
是相同的
$('#zoom01, .cloud-zoom-gallery').CloudZoom();
要么
jQuery('#zoom01, .cloud-zoom-gallery').CloudZoom();
noConflict()
它没有直接接受选择器,它只是一个将jQuery在某个范围内设置为变量的函数,因此你可以拥有多个版本的jQuery(你不应该这样)或使用其他也$
用于某些东西的库,它不会反映选择器引擎或其他任何东西,即使它看起来如此乍一看,它只是返回一个实例jQuery
在javascript中有点表示法和括号表示法,因此可以访问对象
object.propertyName
要么
object['propertyName']
因为javascript中的所有东西都是一个对象,即使是jQuery方法,它们也可以被访问为
$('#element').fadeIn(200);
要么
$('#element')['fadeIn'](200);
它是一样的,所以这样做
$(window)['on']("scroll", fixDiv );
是相同的
$(window).on("scroll", fixDiv );
使用括号的优点是它们可以包含任何字符串,甚至是变量,或者在这种情况下是三元语句,或者函数的返回结果
var event = 'on'; $(window)[event]("scroll", fixDiv );
要么
var event = this.off ? 'off' : 'on'; $(window)[event]("scroll", fixDiv );
一个人也使用this
,在全球范围内,它将是window
,并且它是相同的
$(window)[this.off ? 'off' : 'on']("scroll", fixDiv );
三元语句本身只是一个奇特的条件,而且这个
var event; if (this.off) { event = 'off'; } else { event = 'on'; }
与...完全相同
var event = this.off ? 'off' : 'on';
添加了已编辑的问题:
jQuery()
或者$()
是一个函数,我们可以从括号中看出来,所以它就像是
function jQuery(arguments) { // do something }
可称为
jQuery(some_arguments);
而且var $ = jQuery
也可以做到$();
现在我们知道它是一个功能,我们可以做到这一点
$('#element_id')
并且内部jQuery检查我们传递的是什么类型的参数,它看到它是一个字符串,它开始于#
,所以它是一个ID,然后jQuery可以做document.getElementById()
并获取该DOM元素,同时它将该元素包装在一个新的类似数组的对象,通常称为jQuery对象.
我们也可以传入一个DOM节点,数组,对象或其他任何东西,jQuery试图找出它是什么,并包装在那个jQuery对象中供我们与其他jQuery方法一起使用,所以这个:
$({x:10, y:20})
是相同的
var obj = {x:10, y:20}; $(obj)
并且它变成了具有属性x
和的那些jQuery对象之一y
.传入这样的对象意味着我们可以链接方法,并且这些属性在方法中可用.
$({x:10, y:20}).animate({x:50}, 1000);
这基本上是它的工作方式,简化了很多.
至于将对象传递给方法,这是传递参数的一种非常常见的方式.
要了解它是如何工作的,最简单的方法是创建一个方法:
$.fn.doStuff = function(argument) { this.css(argument); }
在一个jQuery插件中,这是jQuery对象,我们现在可以使用上面的方法,除了将参数传递给jQuery之外什么都不做css()
.
我们知道我们可以传递一个css()
像这样的对象:
$('#element').css({left: '10px', top: '20px'});
所以使用我们的插件我们也可以这样做
var obj = {left: '10px', top: '20px'}; $('#element').doStuff(obj);
它最终完成了同样的事情.当然,我们可以对该对象做任何事情:
$.fn.doStuff = function(args) { if ( typeof args == 'string' ) { alert(args); // if it's a string, just alert it } else if ( typeof args == 'object' ) { for ( var key in args ) { // if it's an object, iterate this[0].style[key] = args[key]; // and do something } } }