Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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 编写一个函数以获取具有数据属性的所有元素_Javascript_Jquery_Jquery Plugins - Fatal编程技术网

Javascript 编写一个函数以获取具有数据属性的所有元素

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') 这

后来我试图构建自己的jQuery函数供个人使用,但我对构建这些插件还不熟悉,所以我开始学习并应用我想做的事情,但我遇到了一些问题。。 我试图构建的是一个jQuery函数获取所有元素(目前为
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;
    });
}