对不起,这个非常基本的JQuery问题.我创建了'mytest'jquery函数,如下所示:
jQuery.fn.mytest = function () {
alert($(this).attr('id'))
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我这样称呼它,一切都很完美:
$("#someid").mytest();
Run Code Online (Sandbox Code Playgroud)
它警告"someid".但如果我做这样的事情:
$("#someid, #anotherid, #moreids").mytest();
Run Code Online (Sandbox Code Playgroud)
此功能仅警告"someid".当然存在"另一个"和"更多".
为什么mytest()不起作用,这个函数的正确代码是什么?
您的代码正在为jQuery添加一个"插件",使您的函数可用于jQuery实例.您在函数中只看到一个ID的原因是您正在使用attr,它只检索第一个元素的属性.(另外,你真的不需要attr得到一个id值.)
你的功能应该是这样的(实时拷贝):
jQuery.fn.mytest = function () {
var ids = jQuery.map(this, function(elm) {
return elm.id;
});
alert(ids.join(","));
};
Run Code Online (Sandbox Code Playgroud)
...显示id当前匹配集中每个元素的值(如果有).
或者你可以用一个简单的循环而不是jQuery.map(实时拷贝)来做:
jQuery.fn.mytest = function () {
var ids, index, elm;
ids = [];
for (index = 0; index < this.length; ++index) {
elm = this[index];
if (elm.id) {
ids.push(elm.id);
}
}
alert(ids.join(","));
};
Run Code Online (Sandbox Code Playgroud)
另外,请注意,在jQuery插件函数中,this是当前的jQuery实例,因此您不需要(或希望)传递它$()来创建围绕元素的jQuery包装器(您在事件处理程序中执行此操作,而不是插件-INS).所以当我this.length在上面的第二个例子中,我正在使用length我们当前正在操作的jQuery实例的属性.当我this使用括号表示法(elm = this[index];)索引时,我正在索引到jQuery实例的匹配元素集(如get方法,但更直接).
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |