1

只在我的一个网站上遇到了很多关于 jQuery 1.3.2 的问题。这是一个 Joomla 站点,所以 Mootools 也包含在页面上(而且移除 Mootools 太难了)。"a", ".myClass"基本上问题是用一个选择器(例如: ,not )调用基本的jQuery选择器"html a", ".myClass td",只会返回第一个元素。

我已经单步执行了代码并将其缩小到 Sizzle 引擎中的这个函数:(
请自己查看,第 2058 行jquery.js

var makeArray = function(array, results) {
    array = Array.prototype.slice.call( array );
    if ( results ) {
        results.push.apply( results, array );
        return results;
    }
    return array;
};

我将在这里再次写出来并附上注释,以显示我在调用后记录的值jQuery("a")

var makeArray = function(array, results) {
    // "array" is an array of all the 58 links on the page
    // "results" is an empty jQuery object

    array = Array.prototype.slice.call( array );

    // array is unchanged.

    if ( results ) {   // true
        results.push.apply( results, array );
        // "results" is now an array only holding the FIRST element.
        return results;
    }
    return array;
};

有人可以向我解释这段代码吗?还有为什么它除了我的一个元素之外都摆脱了?

4

1 回答 1

6

啊,我终于找到了。我使用的是旧版本的Validation 插件,它与 jQuery 1.3+ 不兼容——它定义了自己的push方法,只将第一个元素推入数组中,而不是常规的 jQuery 方法。

因此,让这对所有升级后遇到奇怪问题的人发出警告:检查插件的兼容性!

于 2009-04-28T01:37:21.323 回答