【问题标题】:jQuery .prop() compatibilityjQuery .prop() 兼容性
【发布时间】:2023-03-25 10:33:01
【问题描述】:

我正在尝试通过以下方式测试 .prop() 方法是否存在于当前包含的 jQuery 中(出于兼容性原因):

if(typeof $.prop === 'function')

我希望上面的条件是true 对应jQuery >= 1.6false 对应jQuery < 1.6,正如我从docs 中可以理解的那样

无论如何,在 jsfiddle 上对此进行测试会导致:

typeof $.prop === 'function' 是:

  • truejQuery >= 1.6
  • falsejQuery < 1.6 and jQuery > 1.3
  • truejQuery <= 1.3

here 是提供上述结果的非常非常简单的脚本(只需切换 jQuery 版本即可查看我所描述的内容)。

当我尝试将 .prop() 与 jQuery 即 1.3 一起使用时,我收到 .prop is not a function 错误。 同样的问题也发生在 jsfiddle 之外的测试中。 这样的行为正常吗? 我怎样才能真正测试.prop() 是否可用?

谢谢

【问题讨论】:

  • 我在 FF4、Safari5 和 Chrome12 上测试过
  • 为什么支持 1.3。真的很老了。

标签: jquery version compatibility prop


【解决方案1】:

alert(typeof $.fn.prop === 'function')

您想检查位于$.fn 上的jQuery 原型上的.prop 方法。这在 1.3 中是错误的。

此外,我会避免对 jQuery 版本进行功能检测,而是支持特定版本(及更高版本)。

【讨论】:

    【解决方案2】:

    我所做的是为不使用 prop 的 jQuery 版本为 prop 构建一个兼容函数:

    (function($){
        if (typeof $.fn.prop !== 'function')
        $.fn.prop = function(name, value){
            if (typeof value === 'undefined') {
                return this.attr(name);
            } else {
                return this.attr(name, value);
            }
        };
    })(jQuery);
    

    你可以测试这段代码:http://jsfiddle.net/JtK2Q

    【讨论】:

      【解决方案3】:

      您正在检查是否存在 静态 方法。

      您需要通过写$.fn.prop来检查实例方法($.fn$.prototype相同)。

      【讨论】:

      • $.fn.init.prototype
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 2020-11-10
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多