zoukankan      html  css  js  c++  java
  • 解决jquery $符号的冲突

    今天做项目的时候,写了一个ajax提交的js函数,然后在js调试的时候,提示发现 $.ajax ,前面的$ 符号不见了,通过网上搜索找到了下面的解决方法

    jQuery中需要用到$符号,如果其他js库也定义了$符号,那么就会造成冲突,会影响到js代码的正常执行,目前从网上找到了不错的解决方法,大家可以参考下

    jQuery中需要用到$符号,如果其他js库(例如大名鼎鼎的prototype)也定义了$符号,那么就会造成冲突,会影响到js代码的正常执行。jqeury提供了一些方案来避免这个问题,让我们来看看这几个方案有什么区别

    方案1:
    引入noConflict(),将$替换为其他符号
    代码如下:

    var $j = jQuery.noConflict();
    $j(document).ready(function(){
    $j("#btn1").click(function(){
    alert("Text: " + $j("#test").text());
    });
    });

    缺点:引入了这段代码后,不仅是当前的js文件,该html引用的所有js中,如果有用到jquery中的$,都得用$j来代替之前的$

    方案2:
    ready函数是jquery的入口函数,可以
    将$(document).ready(function(){
    替换成
    jQuery( document ).ready(function( $){}
    缺点:只对ready嵌套内的代码有效,对嵌套外的代码是无效的。如果你所有的逻辑,都在写ready函数中,那没问题。但我们一般都会在ready函数之外写一些子函数,然后ready函数再去调用这些函数。这个方案对这些函数是无效的,因此这套方案有局限性。

    方案3(推荐,特别是开发js插件时):

    给js内容包上一个函数
    代码如下:

    jQuery(function($){
    //你的js代码放在这里(例如第二个方案提到的ready函数和子函数)
    //如果是js文件,其实就是在文件头部和尾部各加一行代码
    }

    或者
    代码如下:

    (function($) {
    //你的js代码
    })(jQuery);

    方案4 (个人理解)

    一般$冲突的原因是一个页面引用了多个jquery文件造成的,为了保证项目的jquery版本库的一致性,最好只使用一个jquery版本,就可以避免类似的问题发生。

    这个方法,没有上面两个方案的缺点,只会影响到被包在jQuery(function($){}中的代码。
    不会影响到其他js代码,这一点很重要。试想一下,假如你写了一个js公共组件,该组件需要用到jquery,为了提高鲁棒性,需考虑$符号冲突问题。如果使用方案1,那么别人在使用时,还得遵守你的约定,把自己js代码中的$改成$,而如果使用方案3,既能避免$冲突对该组件的影响,又无需要求使用公共组件的人修改自己的代码。

  • 相关阅读:
    ORACLE AWR 和 ASH
    11g RAC R2 日常巡检--Grid
    Linux中重命名文件
    Xshell4连接Linux后 win快捷键锁屏
    vim 删除临时文件
    shell--read命令
    shell基础篇(一)从hello world开始
    ORACLE--分区表数据清理
    Shell—学习之心得
    awk 手册--【转载】
  • 原文地址:https://www.cnblogs.com/hgmyz/p/5569101.html
Copyright © 2011-2022 走看看