我知道JavaScript中的语法如下:
function myfunction(param){
//some code
}
有没有一种方法可以在jQuery中声明可以添加到元素的函数?例如:
$('#my_div').myfunction()
$("#someElement").hide()
或.addClass()
...
我知道JavaScript中的语法如下:
function myfunction(param){
//some code
}
有没有一种方法可以在jQuery中声明可以添加到元素的函数?例如:
$('#my_div').myfunction()
$("#someElement").hide()
或.addClass()
...
Answers:
从文档中:
(function( $ ){
$.fn.myfunction = function() {
alert('hello world');
return this;
};
})( jQuery );
那你做
$('#my_div').myfunction();
$('my_div').myfunction();
致电
<my_div></my_div>
。您确实需要那里的哈希符号来引用id my_div
。
尽管这里有大量的文档/教程,但您的问题的简单答案是:
// to create a jQuery function, you basically just extend the jQuery prototype
// (using the fn alias)
$.fn.myfunction = function () {
// blah
};
在该函数内部,该this
变量对应于您在其上调用函数的jQuery包装集。所以像这样:
$.fn.myfunction = function () {
console.log(this.length);
};
$('.foo').myfunction();
...将把带有类的元素数刷新到控制台foo
。
当然,语义还有很多东西(以及最佳实践和所有爵士乐),因此请确保您已读懂它。
要使函数在jQuery对象上可用,请将其添加到jQuery原型中(fn是jQuery中原型的快捷方式),如下所示:
jQuery.fn.myFunction = function() {
// Usually iterate over the items and return for chainability
// 'this' is the elements returns by the selector
return this.each(function() {
// do something to each item matching the selector
}
}
通常将其称为jQuery插件。
是的,您要描述的是一个jQuery插件。
要编写jQuery插件,您可以使用JavaScript创建一个函数,并将其分配给object的一个属性jQuery.fn
。
例如
jQuery.fn.myfunction = function(param) {
// Some code
}
在您的插件函数中,this
关键字设置为在其上调用您的插件的jQuery对象。因此,当您这样做时:
$('#my_div').myfunction()
然后将this
inside myfunction
设置为返回的jQuery对象$('#my_div')
。
有关完整的故事,请参见http://docs.jquery.com/Plugins/Authoring。
$(function () {
//declare function
$.fn.myfunction = function () {
return true;
};
});
$(document).ready(function () {
//call function
$("#my_div").myfunction();
});
您可以随时这样做:
jQuery.fn.extend({
myfunction: function(param){
// code here
},
});
OR
jQuery.extend({
myfunction: function(param){
// code here
},
});
$(element).myfunction(param);
听起来您想通过其原型扩展jQuery对象(也称为编写jQuery插件)。这意味着通过调用jQuery函数($(selector/DOM element)
)创建的每个新对象都将具有此方法。
这是一个非常简单的示例:
$.fn.myFunction = function () {
alert('it works');
};
$('#myDatePickerfield').datePicker();