【问题标题】:Javascript/jQuery Regular Expression code issueJavascript/jQuery 正则表达式代码问题
【发布时间】:2009-11-10 22:55:55
【问题描述】:

我正在与 jqDock 合作开展 DotNetNuke 项目。我运行了 jQuery.noConflict() 并浏览了 jqDock.js 文件并将所有“$”更改为“jQuery”(尽管我认为没有必要)。 在这段代码中我有一个问题:

altImage : function(){
      var alt = jQuery(this).attr('alt');
      return (alt && alt.match(/\.(gif|jpg|jpeg|png)$/i)) ? alt : false;

    } //end function altImage()

在正则表达式的末尾有一个块,上面写着$/i,我的查找/替换将其设置为 jQuery。它破坏了程序。这是因为那个 '$' 符号与那里的 jQuery 没有关联吗?它是正则表达式的一部分吗?如果是这样……它到底在说什么?

【问题讨论】:

    标签: javascript jquery regex


    【解决方案1】:

    在这种情况下,$ 符号用作正则表达式的一部分,而不是作为对 jQuery 的调用,所以这就是您遇到问题的原因。它匹配正在执行正则表达式的字符串的结尾。

    【讨论】:

      【解决方案2】:

      $ 匹配字符串的结尾,因此这里与 jQuery 无关。

      关于正则表达式的一些阅读可以找到here

      【讨论】:

        【解决方案3】:

        编写 jQuery 插件的常用风格意味着不需要在整个插件中替换 $大多数插件都是这样编写的,插件代码被一个自调用匿名函数包围,该函数传入jQuery作为参数$,这样$指的是其中的jQuery对象功能。像这样

        (function($) {
        
            // I can happily use $ here to refer to the jQuery object
            $.fn.myFunction ....
        
        })(jQuery);
        

        所以在进行简单的查找/替换时要小心。

        正如其他人已经提到的,在正则表达式的上下文中,$ 用于匹配字符串的结尾。

        最后,当使用$.noConflict() 时,您可以将jQuery 对象分配给不同的别名,并在后续代码中使用该别名。例如

        var $j = $.noConflict();
        
        // can use $j alias for jquery now
        $j(document).ready(function($) { 
            // can use $j or $ for jQuery object inside this function as the 
            // jQuery object is passed in 
        });
        

        【讨论】:

          【解决方案4】:

          在代码中进行如此巨大的查找/替换时,请非常小心。您将正则表达式中使用的 $ 符号更改为 jQuery 表达式,这是错误的。每一个如此大的replace(用其他字符串替换文档中的所有内容)都应该明智地完成。

          阅读 noConflict documentation 以了解您在使用它时有哪些选项 - 甚至还有一个选项可以让您仍然将 $ 用于 jQuery。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-02-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-05-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多