Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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/unit-testing/4.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
jQuery UI:数据选择器不返回HTML5数据属性_Jquery_Jquery Ui_Selector - Fatal编程技术网

jQuery UI:数据选择器不返回HTML5数据属性

jQuery UI:数据选择器不返回HTML5数据属性,jquery,jquery-ui,selector,Jquery,Jquery Ui,Selector,假设我有一段HTML: <div id="container"> <ul> <li><a href="#" data-some-info="foo">Bar</a> <!-- repeating a few like the one --> --> <!-- above for a while ...

假设我有一段HTML:

<div id="container">
   <ul>
       <li><a href="#" data-some-info="foo">Bar</a>
       <!-- repeating a few like the one -->                          -->
       <!-- above for a while ...        -->
   </uL>
</div>
有什么想法吗

更多信息:我正在使用jQuery 1.9.0和jQuery UI 1.9.2

**编辑**

我知道
$(“#容器”)。查找(“a[data some info]”
。这不是我在这里要问的问题。如果有,为什么会这样做?

来自文档

表达式
$(“div:data(foo)”)
与通过
.data(“foo”,value)”存储数据的
匹配

来自jquery代码->

jQuery
data()
存储在对象内部数据中的一个单独对象中 缓存,以避免内部数据和用户定义数据之间的密钥冲突 数据(来自jQuery代码的注释)

当它在HTML中定义时,它只是一个用户定义的数据元素,jQuery
:data
选择器不会选择它

但是,当您调用
.data(some info)
时,它实际上读取用户定义的数据并将其复制到内部数据,然后使用
:data
拾取元素,因为它可以在内部数据中找到它

这不是一个bug,因为文档中明确提到了这一点


您应该使用
.length
,这是一个属性,用于从选择器获取返回元素的数量


另外,
.size
也不推荐使用,因为从jQuery 1.8开始

数据选择器不是JQuery核心的一部分。这可能是一个bug,但是JQuery文档说HTML5数据属性被拉入内部JQuery数据对象(可能是在调用
.data
)中,而不是作为
:data
伪选择器的一部分(根据jQueryUI,文档按原样查询内部数据表示,而不涉及HTML5数据属性)

备选办法:


使用
$(“#容器”).find(“a[data-some-info='foo']”
,或者如果在数据属性上设置了任何内容,
.find(“a[data-some-info]”
这是选择器的实现方式:

$.extend( $.expr[ ":" ], {
    data: $.expr.createPseudo ?
        $.expr.createPseudo(function( dataName ) {
            return function( elem ) {
                return !!$.data( elem, dataName );
            };
        }) :
        // support: jQuery <1.8
        function( elem, i, match ) {
            return !!$.data( elem, match[ 3 ] );
        },
$.extend($.expr[“:”]{
数据:$.expr.createPseudo?
$.expr.createPseudo(函数(dataName){
返回函数(elem){
return!!$.data(elem,dataName);
};
}) :

//支持:jQuery
length
size
,它不会改变任何东西。但我会记住
size
:)它不是一个bug,但显然是一个意外行为,因为当您调用.data(一些信息)时返回用户数据。不,我是问为什么会这样。到目前为止,您似乎有正确的答案…在所有情况下看起来都是未定义的行为(没有很好的文档记录)我建议对JQuery UI人员进行修复,使
:data
选择器的工作方式更像对
.data
的调用,但出于性能原因,可能会采用这种方式。我认为用例是选择先前对
.data(key,val)的调用所设置的内容
混合使用CSS和内部存储。
:data
选择器是否有可用的文档?我猜它是一个jQuery CSS选择器,只查看已经缓存的元素数据(这至少可以解释您看到的行为)啊,它是由jQuery UI添加的。请注意,文档根本没有引用它,而是通过数据属性进行选择。@KevinB,您可能在这里发现了一些东西。
$.extend( $.expr[ ":" ], {
    data: $.expr.createPseudo ?
        $.expr.createPseudo(function( dataName ) {
            return function( elem ) {
                return !!$.data( elem, dataName );
            };
        }) :
        // support: jQuery <1.8
        function( elem, i, match ) {
            return !!$.data( elem, match[ 3 ] );
        },