我正在尝试向 jQuery 添加自定义伪选择器,目前使用的是 v1.8.0,基于我发现的一些不同的教程。我本质上是在尝试实现一个不区分大小写的 :contains 选择器。
我现在的化身看起来像这样
$.expr[':'].icontains = function(obj, index, meta, stack){
return (obj.textContent || obj.innerText || jQuery(obj).text() || '').toLowerCase().indexOf(meta[3].toLowerCase()) >= 0;
};
它来自这个帖子 https://stackoverflow.com/a/3968100/173390。看起来选择器已正确初始化,但当 jQuery 调用该函数时,仅定义了 obj 参数。其余 3 个参数未定义。
当我将参数记录到控制台时,我看到一个包含 2 个项目的数组,第一个项目是我的选择器在 :icontains 调用之前返回的 DOM 对象,第二个项目未定义。
有谁知道为什么会发生这种情况?
他们在 1.8 中重写了 Sizzle。现在,定义伪的方式 http://blog.jquery.com/2012/07/04/the-new-sizzle/如下:http://jsfiddle.net/bazWj/ http://jsfiddle.net/bazWj/.
$.expr.pseudos.icontains = $.expr.createPseudo(function(arg) {
return function(elem) {
return (elem.textContent
|| elem.innerText
|| jQuery(elem).text()
|| '')
.toLowerCase()
.indexOf(arg.toLowerCase()) >= 0;
};
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)