关于javascript/jquery语法

 小丸子2502856277_253 发布于 2023-02-06 12:50

我无法在任何地方找到类似这样的语法:

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}

任何人都可以详细说明这些语法吗?

1 个回答
  • 最好的起点是文档

    $ .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
    
              }
    
        }
    }
    

    2023-02-06 12:52 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有