Javascript 将函数添加到jQuery元素
我正在尝试使用jQuery向对象添加函数。 不幸的是,这并不像预期的那样有效。 我刚开始使用jQuery并阅读文档,但我需要一个提示,告诉我应该朝哪个方向解决问题 多谢各位Javascript 将函数添加到jQuery元素,javascript,jquery,Javascript,Jquery,我正在尝试使用jQuery向对象添加函数。 不幸的是,这并不像预期的那样有效。 我刚开始使用jQuery并阅读文档,但我需要一个提示,告诉我应该朝哪个方向解决问题 多谢各位 <ul id="ul_list"> <li id="li_a">a</li> </ul> $("#li_a").speak = function () { alert("Hello I'm a!"); }; var button = $('<button
<ul id="ul_list">
<li id="li_a">a</li>
</ul>
$("#li_a").speak = function () {
alert("Hello I'm a!");
};
var button = $('<button/>').html('speak');
button.click(function () {
$('#li_a').speak();
});
button.appendTo("body");
a
$(“#li_a”).speak=函数(){
警惕(“你好,我是一个!”;
};
var按钮=$('').html('speak');
按钮。单击(函数(){
$('liu a')。说();
});
按钮。附件(“主体”);
您添加的成员函数不正确。要做到这一点,你需要。您需要连接到$.fn.speak
:
$.fn.speak = function () {
alert("Hello I'm a!");
};
var button = $('<button/>').html('speak');
button.click(function () {
$('#li_a').speak();
});
$.fn.speak=函数(){
警惕(“你好,我是一个!”;
};
var按钮=$('').html('speak');
按钮。单击(函数(){
$('liu a')。说();
});
试试这个JSFIDLE:
(函数($){
$.fn.speak=函数(){
警惕(“你好,我在说话!”);
归还这个;
};
}(jQuery));
var按钮=$('').html('speak');
按钮。单击(函数(){
$('li')。每个(函数(){
$(this.speak();
});
});
按钮。附件(“主体”)代码>您所做的工作不起作用,因为jQuery的$
函数每次调用它时都返回一个新的类似数组的对象,该对象包含元素。变异其中一个只会更改其实例,下次调用$
获取元素时,它是一个全新的数组
您可以使用jQuery的data
函数将函数存储在对象中:
$("li_a").data("speak", function() {
alert("Hello I'm a!");
});
并称之为
button.click(function () {
$("li").each(function () {
$(this).data("speak")();
});
});
请注意必须如何在循环中调用函数-我们首先在“speak”下访问数据,然后调用它
当您希望每个元素具有不同的行为时,此方法非常有效。如果它们的行为都相似,那么您最好像其他答案所描述的那样扩展$.fn
,因为这样做会将行为分配给所有对象。谢谢您的帮助
我找到了解决我问题的办法,也许不是最好的办法,但对我很有效
<ul id="ul_list">
<li id="li_a">a</li>
</ul>
$('#li_a') [0].speak = function () {
alert('Hello I\'m a!');
};
var button = $('<button/>').html('speak2');
button.click(function () {
var el = $('#li_a') [0];
if (typeof el.speak == 'function') el.speak();
});
button.appendTo('body');
a
$('#li_a')[0]。speak=函数(){
警惕(‘你好,我是一个!’);
};
var按钮=$('').html('speak2');
按钮。单击(函数(){
var el=$('liu a')[0];
if(typeof el.speak=='function')el.speak();
});
按钮。附加到(“主体”);
使用[0]我可以得到DOM元素。谢谢。你是对的,我需要每个元素有不同的行为。我把你的建议放在我的示例中,但是使用这个数据函数,我无法获得原始对象的引用。这是我建议的一部分。我删除了您拥有的p
元素,但是您可以用与li
sThank you相同的方式实现它的行为。但我需要的是在speak函数中引用原始元素的方法。例如,如果lis是可拖动的(我认为这在jQueryUI中是可能的),speak应该能够返回实际位置。一个选项是在循环中调用对象时将对象(或任何相关信息)传递到它自己的speak函数中。