Javascript 编写一个函数以获取具有数据属性的所有元素
后来我试图构建自己的jQuery函数供个人使用,但我对构建这些插件还不熟悉,所以我开始学习并应用我想做的事情,但我遇到了一些问题。。 我试图构建的是一个jQuery函数获取所有元素(目前为Javascript 编写一个函数以获取具有数据属性的所有元素,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,后来我试图构建自己的jQuery函数供个人使用,但我对构建这些插件还不熟悉,所以我开始学习并应用我想做的事情,但我遇到了一些问题。。 我试图构建的是一个jQuery函数获取所有元素(目前为inputs)的属性data-x,然后对其应用另一个jQuery方法,例如addClass('class') 因此,不是这行代码('input[data-x=“test”]”),而是addClass('class')我想使用我的函数getElems('x','test')。addClass('class') 这
inputs
)的属性data-x
,然后对其应用另一个jQuery方法,例如addClass('class')
因此,不是这行代码('input[data-x=“test”]”),而是addClass('class')代码>我想使用我的函数getElems('x','test')。addClass('class')代码>
这就是我写的()
(函数($){
$.fn.getElems=函数(键,值){
变量元素=[];
对于(var x=0;x
当我尝试添加类时,出现了错误<代码>未定义不是函数
如果你想链接jQuery方法,你的插件应该返回这个引用:
(function ($) {
$.fn.getElems = function (key, value) {
return this.filter(function() {
return $(this).data(key) === value;
});
};
}(jQuery));
一般来说,您应该使用jqueryfilter方法来实现这一目的。这样,您的代码将更像jQuery
演示:
或者,如果您仍然希望继续使用for
循环的版本,则必须返回类似return$(elems)的内容代码>而只是元素
:
$.fn.getElems = function (key, value) {
var elems = [];
for (var x = 0; x < this.length; x++) {
if ($(this[x]).data(key) === value) {
elems.push(this[x]);
}
}
return $(elems);
};
$.fn.getElems=函数(键,值){
变量元素=[];
对于(var x=0;x
不过这看起来有点笨拙
演示:这可能是因为您正在对数组调用jQuery方法。您可以使用filter
方法,并返回过滤后的集合:
$.fn.getElems = function (key, value) {
return this.filter(function () {
return $(this).data(key) === value;
});
}
应返回jQuery对象$(元素);而不是返回元素;注意data()会将字符串数字转换为数字,这会导致相当混乱,具体取决于预期的结果,例如:我会使用:return$(this)代码>刚刚进来case@A.Wolff是的,这是真的。@A.Wolff非常有趣的观察!确实可能会非常混乱。请使用.getAttribute(“数据-”+key)
而不是.data(key)
。更便宜,并且不会不必要地将数据导入jQuery.cache
.getAttribute(“数据-”+key)
获取错误@squint@user3003810:“获取错误”并没有告诉我多少。怎么了?你可能用错东西了。这不是jQuery方法。对不起,我忘了写这个而不是$(这个)。。它很好用@斜视
$.fn.getElems = function (key, value) {
return this.filter(function () {
return $(this).data(key) === value;
});
}