Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当选择器不返回任何结果时,jQuery1.9.1中的哪些更改导致.data扩展方法返回null而不是undefined?_Javascript_Jquery - Fatal编程技术网

Javascript 当选择器不返回任何结果时,jQuery1.9.1中的哪些更改导致.data扩展方法返回null而不是undefined?

Javascript 当选择器不返回任何结果时,jQuery1.9.1中的哪些更改导致.data扩展方法返回null而不是undefined?,javascript,jquery,Javascript,Jquery,最近,我开发的应用程序从jQuery 1.7.1升级到了1.10.2,其中包括了Migrate 1.2.1 升级后,我们注意到jQuery为扩展方法data返回了不同的结果,这取决于选择器是否有任何结果。无论选择器结果如何,attr扩展方法始终返回undefined 使用下面的HTML文档,我对版本1.7.1、1.8.3、1.9.1和1.10.2进行了测试 <html> <head></head> <body> <div id="r

最近,我开发的应用程序从jQuery 1.7.1升级到了1.10.2,其中包括了Migrate 1.2.1

升级后,我们注意到jQuery为扩展方法
data
返回了不同的结果,这取决于选择器是否有任何结果。无论选择器结果如何,
attr
扩展方法始终返回
undefined

使用下面的HTML文档,我对版本1.7.1、1.8.3、1.9.1和1.10.2进行了测试

<html>
<head></head>
<body>

    <div id="results">trying to access .data member off a selector that returns no results</div>

    <script type="text/javascript" src="jQuery.js"></script>
    <script type="text/javascript">
        $(function(){
            var target = $("#results");
            target.append("<div>jQuery " + $.fn.jquery + " => " + $("p").data("blah") + "</div>");
            target.append("<div>jQuery " + $.fn.jquery + " => " + $("p").attr("data-blah") + "</div>");

            target.append("<div>jQuery " + $.fn.jquery + " => " + $("body").data("blah") + "</div>");
            target.append("<div>jQuery " + $.fn.jquery + " => " + $("body").attr("data-blah") + "</div>");
        });
    </script>
</body>

试图从不返回结果的选择器中访问.data成员
$(函数(){
var目标=$(“#结果”);
target.append(“jQuery”+$.fn.jQuery+”=>“+$(“p”).data(“blah”)+”;
target.append(“jQuery”+$.fn.jQuery+”=>“+$(“p”).attr(“数据blah”)+”;
target.append(“jQuery”+$.fn.jQuery+”=>“+$(“body”).data(“blah”)+”;
target.append(“jQuery”+$.fn.jQuery+”=>“+$(“body”).attr(“数据blah”)+”;
});

在1.7.1和1.8.3中,所有结果均
未定义
。 在1.9.1和1.10.2中,带有
.data(“blah”)
的空选择器的结果从
未定义的
切换到
null

我已经查看了1.9.0升级文档以及1.10.0发行说明,没有发现任何关于这些更改的迹象。有人知道这是为什么吗?是故意的吗

我已经包括了一个提琴来展示jQuery的各种版本是如何处理这个问题的


这种行为的改变不是我们想要的,而是(或者说:它是)一个bug。 区别来自以下几行:

在jquery-1.8.3.js:1772中

if (value === undefined) {
    data = this.triggerHandler("getData" + part, [parts[0]]);

    // Try to fetch any internally stored data first
    if (data === undefined && elem) {
        data = jQuery.data(elem, key);
        data = dataAttr(elem, key, data);
    }

    return data === undefined && parts[1] ? 
    this.data(parts[0]) : 
    data;
}
当选择器为空时,返回
数据
,此时
数据
未定义

但是在jquery-1.9.1.js:1824中

if (value === undefined) {
    // Try to fetch any internally stored data first
    return elem ? dataAttr(elem, key, jQuery.data(elem, key)) : null;
}
当选择器为空时,
elem
计算为false,并返回
null

这并不是有意的,而是在11月由applied公司实际修复的。使用jquery-1.11.0运行代码具有原始行为:
undefined
返回。

很抱歉,您是正确的。我把小提琴的版本弄错了。现在更新。在尝试跟踪此提交过程中,查看2012年11月13日至2013年1月15日期间github上的更改可能会有所帮助()谢谢!查看代码的精确部分非常有帮助。我做了更多的研究,看起来好像这是一个bug,它被修复了,然后可能恢复或从未真正修复()。我看到了单元测试,所以我对修复有信心。没错,我对历史也有点困惑。修复程序可能在某些合并过程中意外丢失,并在以后重新执行。