0

我开始编写自定义选择器(什么都不做):

$.expr[':'].blabla = function (elem,idx,meta,items) 
{
  console.log(idx);
   return true; //just for testing
}

运行它:(我有 10 个空 div)

$(function (){$("div:blabla").text('3');});

但控制台总是显示0在 idx。

我究竟做错了什么 ?

jsbin

4

1 回答 1

1

在 jquery 1.8 自定义伪选择器被破坏,从 1.8.1 开始,他们建议使用如下构造(链接) - 使用来自 sizzle 选择器引擎的 createPseudo ,如果不存在则支持向后兼容性:

$.expr[':'].blabla = $.expr.createPseudo ?
$.expr.createPseudo(function() {
    return function( elem, doc, isXML ) {
        //return true for matched elements
    };
}) :
function( elem, i, match ) {
        //return true for matched elements
};

虽然,createPseudo 不允许您获取元素的索引,但您可能可以使用计数器解决此问题。

于 2013-09-27T13:38:49.430 回答